初学者试图调试一个简单的程序

时间:2017-02-14 01:00:25

标签: python compiler-errors

我是一名学生,我刚刚开始学习代码。现在我正在使用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技巧。)

1 个答案:

答案 0 :(得分:0)

默认情况下,假定在函数内修改的任何变量都是该函数的本地变量。因此,如果您有i += 1,则必须先在函数中定义i。或者你必须将i声明为全局优先(global i),以便python知道它引用了你在函数外定义的i(第一个)。但要小心全局,它们通常很危险(因为它们很难跟踪发生的事情),如果可能的话应该避免。