递归赋值前引用的局部变量
local variable referenced before assignment in recursion
我的程序不工作。
本来就是
- 你有一个数组和一个代码
- 如果代码为 0,则您必须将数字相加
- 如果是其他任何东西,则必须将它们相乘
- 我希望它使用递归,但是当你得到少于 5 个数字时,我不会使用更多递归,我只想正常使用
这是我遇到的问题
the_rest = sum_or_product(code, array[1:])
UnboundLocalError: local variable 'sum_or_product' referenced before assignment
这是程序
def sum_or_product(code, array):
if code == 0:
do = 'SUM'
else:
do = 'PRODUCT'
# THIS IS WITH THE RECURSION
if len(array) >= 5:
this_one = array[0]
the_rest = sum_or_product(code, array[1:])
if do == 'SUM':
return this_one + the_rest
if do == 'PRODUCT':
return this_one * the_rest
# THIS IS WITHOUT THE RECURSION
if do == 'SUM':
start = 0
if do == 'PRODUCT':
start = 1
sofar = start
for i in array:
if do == 'SUM':
total = sofar + i
sofar = total
if do == 'PRODUCT':
product = sofar * i
sofar = product
sum_or_product = sofar
return sum_or_product
print(sum_or_product(1, [1,2,3,4,5,6,7,8,9,10]))
它应该乘以从 1 到 10 的所有数字。但它只是给出了一个错误。
def sum_or_product(code, array):
return (([code * num for num in array if code != 0 and num <= 5]), ([code + num for num in array if num > 5]))
print(sum_or_product(2, [1,2,3,4,5,6,7,8,9,10]))
输出
([2, 4, 6, 8, 10], [8, 9, 10, 11, 12])
为了return一个函数的值,你只需
return <value>
而不是将值赋给函数。
因此,为了修复您的代码,您只需更换
sum_or_product = sofar
return sum_or_product
与
return sofar
附带说明一下,不要使用像“0 是 SUM,1 是 PRODUCT”这样晦涩的约定,而是使用常量,例如:
OP_SUM=0
OP_PRODUCT=1
def sum_or_product(operation, array):
...
if operation == OP_SUM:
...
elif operation == OP_PRODUCT:
...
...
print(sum_or_product(OP_SUM, [2, 3]))
我的程序不工作。
本来就是
- 你有一个数组和一个代码
- 如果代码为 0,则您必须将数字相加
- 如果是其他任何东西,则必须将它们相乘
- 我希望它使用递归,但是当你得到少于 5 个数字时,我不会使用更多递归,我只想正常使用
这是我遇到的问题
the_rest = sum_or_product(code, array[1:])
UnboundLocalError: local variable 'sum_or_product' referenced before assignment
这是程序
def sum_or_product(code, array):
if code == 0:
do = 'SUM'
else:
do = 'PRODUCT'
# THIS IS WITH THE RECURSION
if len(array) >= 5:
this_one = array[0]
the_rest = sum_or_product(code, array[1:])
if do == 'SUM':
return this_one + the_rest
if do == 'PRODUCT':
return this_one * the_rest
# THIS IS WITHOUT THE RECURSION
if do == 'SUM':
start = 0
if do == 'PRODUCT':
start = 1
sofar = start
for i in array:
if do == 'SUM':
total = sofar + i
sofar = total
if do == 'PRODUCT':
product = sofar * i
sofar = product
sum_or_product = sofar
return sum_or_product
print(sum_or_product(1, [1,2,3,4,5,6,7,8,9,10]))
它应该乘以从 1 到 10 的所有数字。但它只是给出了一个错误。
def sum_or_product(code, array):
return (([code * num for num in array if code != 0 and num <= 5]), ([code + num for num in array if num > 5]))
print(sum_or_product(2, [1,2,3,4,5,6,7,8,9,10]))
输出
([2, 4, 6, 8, 10], [8, 9, 10, 11, 12])
为了return一个函数的值,你只需
return <value>
而不是将值赋给函数。
因此,为了修复您的代码,您只需更换
sum_or_product = sofar
return sum_or_product
与
return sofar
附带说明一下,不要使用像“0 是 SUM,1 是 PRODUCT”这样晦涩的约定,而是使用常量,例如:
OP_SUM=0
OP_PRODUCT=1
def sum_or_product(operation, array):
...
if operation == OP_SUM:
...
elif operation == OP_PRODUCT:
...
...
print(sum_or_product(OP_SUM, [2, 3]))