我写了一个快速排序的代码。但我不知道为什么会发生名称错误?



我为快速排序编写了这段代码。

def partition(a,start = 0,end = len(a)-1):
pivot = a[0]
while start<end:
while a[start]<=pivot:
start+=1
while a[end]>pivot:
end-=1
a[start],a[end] = a[end],a[start]
pivot,a[end] = a[end],pivot
return end
def quicksort(a,lb =0,ub =len(a)-1):
if lb<ub:
loc = partition(a,lb,ub)
quicksort(a,lb,loc-1)
quicksort(a,loc+1,ub)
A = [3,5,1,7,9,6,2]
B = quicksort(A)
print(B)

我不知道为什么会出现NameError。a是函数的参数。直到它给出错误。

Traceback (most recent call last):
File "/data/data/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 31, in <module>
start(fakepyfile,mainpyfile)
File "/data/data/ru.iiec.pydroid3/files/accomp_files/iiec_run/iiec_run.py", line 30, in start
exec(open(mainpyfile).read(),  __main__.__dict__)
File "<string>", line 1, in <module>
NameError: name 'a' is not defined

[程序完成]

您不能在计算另一个参数的默认值时使用一个参数,因为它们是在方法定义时计算的,而不是在方法调用时,所以其他参数不能使用,默认值应该是不可变值

您可以使用None作为默认值,并使用它进行检查

def quicksort(a, lb=0, ub=None):
ub = len(a) - 1 if ub is None else ub
#...

def partition(a, start=0, end=None):
end = len(a) - 1 if end is None else end
#...
def quicksort(a,lb =0,ub =len(a)-1):

–是的,a是一个参数,它将在quicksort函数的主体中定义,但目前您正在尝试获取len(a),它尚未定义。我建议进行以下更改:

def quicksort(a,lb=0,ub=None):
if ub is None:
ub = len(a)-1

剩下的代码保持原样。

相关内容

最新更新