-1

我的程序不工作。

它的意思是

  • 你有一个数组和一个代码
  • 如果代码为 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。但它只是给出了一个错误。

4

2 回答 2

0
    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])
于 2020-08-08T11:59:03.597 回答
0

为了从函数返回一个值,你只需

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]))
于 2020-08-08T12:15:30.483 回答