如何修复“ TypeError:+不支持的操作数类型:'int'和'NoneType'”

时间:2019-09-17 06:06:57

标签: python recursion computer-science recursive-query

我正在创建一个程序,假设每个人方便地重达200磅,它就会计算出金字塔中每个人的体重。我的问题是函数中的最后一个'elif',它引发错误:TypeError:+不支持的操作数类型:'int'和'NoneType'。

这需要是我班上的递归函数。

我已经尝试过'return'语句,并且已经使用'tot ='而不是'tot + ='。

tot = 0.0

def prac(r, c):

    global tot
    if c > r:
        print('Not valid')
    elif r == 0 and c >= 0:
        print(tot, 'lbs')
    elif r > 0 and c == 0:
        tot += (200 / (2 ** r))
        prac(r - 1, c)
    elif r > 0 and c == r:
        tot += (200 / (2 ** r))
        prac(r - 1, c - 1)
    elif r > 0 and r > c > 0:
        tot += (200 + (prac(r - 1, c - 1)) + (prac(r - 1, c)))
        prac(r == 0, c == 0)



prac(2, 1)

我希望它能计算出prac(2,1)到300 lbs,prac(3,1)到425等...

2 个答案:

答案 0 :(得分:1)

prac函数不返回任何内容,并且不返回的函数被赋予None类型。在最后一个elif语句中,您尝试将None添加到tot,这将引发错误。

我不确定您的代码试图完成什么,因此很难给出正确的答案,但这是一个猜测:

tot = 0.0

def prac(r, c):

    global tot
    if c > r:
        print('Not valid')
    elif r == 0 and c >= 0:
        print(tot, 'lbs')
    elif r > 0 and c == 0:
        tot += (200 / (2 ** r))
        prac(r - 1, c)
    elif r > 0 and c == r:
        tot += (200 / (2 ** r))
        prac(r - 1, c - 1)
    elif r > 0 and r > c > 0:
        x = prac(r - 1, c - 1)
        y = prac(r - 1, c)
        tot += 200
        if x is not None:
            tot += x
        if y is not None:
            tot += y
        prac(r == 0, c == 0)



prac(2, 1)

答案 1 :(得分:0)

我遍历了您的代码,发现您没有在函数中返回任何东西,这使最后一个elif变得糟糕。

在每次迭代中,您都在调用该函数以进行进一步的计算。让我们跳到最后一个elif。在这里,您要添加函数返回的值以及静态值。由于您未在函数中返回任何内容,因此该值将另存为NoneType。如果您打算在另一个或另一个elif处终止循环,请从那里返回值。然后,当您在最后一个Elif中调用该函数时,该函数将返回某些内容,并且添加操作将正确进行。

我不了解机制,但我要传达的是为返回值的循环设置一个停止条件(您尚未解决C变为还要小于0。

我希望你明白我的意思。祝你好运!