我是一名学生,我刚刚开始学习代码。现在我正在使用Python并拥有一个我认为应该可行的程序,但只返回一些我不理解的错误:
回溯(最近一次调用最后一次):文件" C:\ Program 文件\记事本++ \ 1913lab3.py",第23行,打印(大多数(奇数, []))
文件" C:\ Program Files \ Notepad ++ \ 1913lab3.py",第9行,大多数N = S [i] UnboundLocalError:局部变量' i'以前引用过 分配
我不明白第一个错误告诉我的是什么,但我想我理解第二个错误,但我不明白我为什么会得到它。我不认为我是一个局部变量,因为我在开始时立即定义它。这是代码:
t = 0
f = 0
i = 0
def odd(N):
return N % 2 != 0
def most(P, S):
N = S[i]
if P == True:
t += 1
else:
f += 1
i += 1
if i < len(S):
most(P, S)
else:
if t > f:
return 'True'
else:
return 'False'
print(most(odd, []))
print(most(odd, [0]))
print(most(odd, [1]))
print(most(odd, [1, 2]))
print(most(odd, [1, 2, 3]))
赋值是定义递归函数(most())。该函数将一个函数和一个列表作为其参数(P和S)。我不能使用循环或局部变量。这是作业的引用:
&#34; P是一个返回True或False的参数的函数, 和S是一个列表。函数最多在S的每个元素上调用P. 如果P返回True的次数多于返回False,则必须返回True。 否则必须返回False。&#34;
5个打印命令只是我需要为信用工作的5个例子,但是这个程序需要适用于所有列表。如果有人可以帮助我解决这些错误,那就太棒了。 (此外,欢迎任何一般的Python技巧。)
答案 0 :(得分:0)
默认情况下,假定在函数内修改的任何变量都是该函数的本地变量。因此,如果您有i += 1
,则必须先在函数中定义i
。或者你必须将i
声明为全局优先(global i
),以便python知道它引用了你在函数外定义的i
(第一个)。但要小心全局,它们通常很危险(因为它们很难跟踪发生的事情),如果可能的话应该避免。