【问题标题】:TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'TypeError: *: 'NoneType' 和 'int' 的不支持的操作数类型
【发布时间】:2016-08-25 22:52:24
【问题描述】:

我在下面的代码中找不到我的错误。如果我在else部分说“return”而不是“print”,代码不能执行else部分,它只在if部分进行计算。我怎样才能解决这个问题?

def calculatePerimeter(length, depth):
    if depth == 1:
        return 3 * length
    else:
        print (calculatePerimeter(length, depth-1) * (4/3)**(depth)) / ((4/3)**(depth-1))

calculatePerimeter(100, 3)

【问题讨论】:

  • 我试了一下效果很好。 calculatePermimiter(100, 3) 返回300
  • 由于将 return 替换为 print,您会遇到该错误。如果函数在 else 部分没有“返回”任何内容,则返回 None。这就是您在错误消息中看到的NoneType
  • 我尝试了您所说的所有解决方案,但 300 不是正确答案。它给你 300 因为它根本不能执行 else 部分。 300 来自 if 部分,我的意思只是递归的基本情况。
  • 也许递归的逻辑是错误的,问题不在于类型。不过谢谢。

标签: python python-3.x recursion typeerror nonetype


【解决方案1】:

您需要在else 子句中返回值,否则没有什么可乘的(除非在递归中进行最后一次调用)。那么调用函数时需要调用print

def calculatePerimeter(length, depth):
    if depth == 1:
        return 3 * length
    else:
        return (calculatePerimeter(length, depth-1) * (4/3)**(depth)) / ((4/3)**(depth-1))

print(calculatePerimeter(100, 3))

【讨论】:

    猜你喜欢
    • 2017-12-27
    • 2014-03-31
    • 2021-05-23
    • 2015-10-15
    • 1970-01-01
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    相关资源
    最近更新 更多