我正在尝试运行以下代码:
number = input("Number: ")
valid = False
sumOfOdd = 0
def validation(credit_num):
for i in range(len(credit_num)):
if i % 2 != 0:
sumOfOdd += i
def main():
print(f"Your credit card number is {number}, it's third digit is {number[2]}")
print(f'sum of odds: {sumOfOdd}')
validation(number)
main()
但我得到了这个错误:
Traceback (most recent call last):
File "credit.py", line 15, in <module>
validation(number)
File "credit.py", line 8, in validation
sumOfOdd += i
UnboundLocalError: local variable 'sumOfOdd' referenced before assignment
我可以运行,但当我输入任何数字时,它都会给我这个错误
这是解决办法
def validation(credit_num):
global sumOfOdd
for i in range(len(credit_num)):
if i % 2 != 0:
sumOfOdd += i
发生此错误是因为无法从函数内访问局部变量SUMOFODD
。 您可以在函数中声明变量global
,但使用global
语句时要小心。
在我看来,更好的方法是提供sumofodd
作为函数的参数,并返回更新后的变量:
def validation(credit_num, sumOfOdd):
for i in range(len(credit_num)):
if i % 2 != 0:
sumOfOdd += i
return sumOfOdd
validation(number, 0)
# Returns the correct sum.
或者,如果您知道SUMOFODD
应该始终由零初始化,则可以在本地定义变量:
def validation(credit_num):
sumOfOdd = 0
for i in range(len(credit_num)):
if i % 2 != 0:
sumOfOdd += i
return sumOfOdd