递归赋值前引用的局部变量

local variable referenced before assignment in recursion

我的程序不工作。

本来就是

这是我遇到的问题

    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]))