簡體   English   中英

我寫了一個快速排序的代碼。 但我不知道為什么會發生 NameError?

[英]I wrote a code for quicksort. But I don't know why this is occurring NameError?

我為快速排序編寫了這段代碼。

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是function的參數。 直到它給出錯誤。

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

並且您的代碼的 rest 保持原樣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM