[英]Python 2.7 Global name not defined
編寫一個python程序來執行合並排序,但我得到一個找不到全局名稱的錯誤
### Program for Merge Sort ###
def merge(numbers, l, m, r):
n1 = m-l-1 ### Size of the left side array ###
n2 = r-l ### Size of the right side array ###
### Temporary Lists ###
for i in range(n1):
L[i] = numbers[l+i]
for j in range(n2):
R[j] = numbers[m+j+1]
### The following code eliminates searching if any of the lists have become empty ###
L[n1] = float("inf")
R[n1] = float("inf")
i = 0
j = 0
for k in range(l,r+1):
if(L[i]<=R[j]):
numbers[k] = L[i]
i+=1
else:
numbers[k] = R[j]
j+=1
def mergeSort(numbers, l, r):
if (l<r):
m = l+(r-1)/2 ### Avoids overflow for large numbers
mergeSort(numbers, l, m)
mergeSort(numbers, m+1, r)
merge(numbers, l, m, r)
我的驅動程序在用戶輸入數字上調用mergeSort函數,運行代碼時出現錯誤,提示未定義全局名稱“ R”
Traceback (most recent call last):
File "merge_sort.py", line 55, in <module>
main()
File "merge_sort.py", line 50, in main
mergeSort(numbers, 0, size-1)
File "merge_sort.py", line 32, in mergeSort
mergeSort(numbers, l, m)
File "merge_sort.py", line 33, in mergeSort
mergeSort(numbers, m+1, r)
File "merge_sort.py", line 34, in mergeSort
merge(numbers, l, m, r)
File "merge_sort.py", line 10, in merge
R[j] = numbers[m+j+1]
NameError: global name 'R' is not defined`
我究竟做錯了什么?
實際上,您從未定義名稱R
通過替換來解決此問題:
for j in range(n2):
R[j] = numbers[m+j+1]
有:
R = [numbers[m+j+1] for j in range(n2)]
(順便說一句,對於L
,同樣的方法-我很驚訝您沒有將其視為錯誤,因為您在名稱R
之前訪問了名稱L
)。
您需要先初始化臨時列表L
和R
,然后再使用它們。
L = []
R = []
for i in range(n1):
L[i] = numbers[l+i]
for j in range(n2):
R[j] = numbers[m+j+1]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.