尝试在python上实现QuickSort:NameError:未定义全局名称“x”

时间:2013-02-15 21:06:05

标签: python quicksort

我正在学习使用Python,并开始编写某些类型的代码。 我尝试了一百个可能的更改,但我不知道如何修复它。 这是我的代码:

from random import *
from time import *

L = []
for m in range(0,100):
    L.append(randint(0,100))

def quicksort(L, first, last):

    i = first
    j = last
    pivote = (L[i] + L[j]) / 2

    while i < j:
        while L[i] < pivote:
            i+=1
        while L[j] > pivote:
            j-=1
        if i <= j:
            x == L[j]
            L[j] == L[i]
            L[i] == x
            i+=1
            j-=1

    if first < j:
        L == quicksort(L, first, j)
    if last > i:
        L == quicksort(L, i, last)

    return L

start = time() 
print ("Disordered:" , L)
L = quicksort(L, L[0], L[len(L)-1])
print ("Ordered:" ,L)
print ("%.2f seconds" % (time() - start))

这是错误:

Traceback (most recent call last):
  File "/Users/Ricardo/Desktop/QuickSortR.py", line 48, in <module>
    L = quicksort(L, L[0], L[len(L)-1])
  File "/Users/Ricardo/Desktop/QuickSortR.py", line 28, in quicksort
    x == L[j]
NameError: global name 'x' is not defined

感谢您的帮助!

2 个答案:

答案 0 :(得分:7)

我认为你想分配给 x

x = L[j]

您正在使用==;相反,相反。你在几个地方这样做; ==求值为布尔值(当两个项被认为相等时),而=则赋值给变量。

在python中,您可以直接交换变量而无需临时:

if i <= j:
    L[j], L[i] = L[i], L[j]

答案 1 :(得分:2)

在某些地方,您在分配时使用==而不是=,例如x == L[j],这就是您与商品进行比较的方式。要分配给x,您应该x = L[j]

请注意,您还需要修复此类其他几行。