【发布时间】:2018-05-04 13:45:32
【问题描述】:
我正在尝试编写一个代码,该代码接受一个数字并将数字的总和返回到其相应位置的幂。 示例:>>>534 返回 5^1 + 3^2 + 4^3。
7
我的代码适用于 100 以下的数字范围。对于 3 位数字,它会失败并显示错误消息:TypeError: Unsupported operand type(s) for +: 'int' and 'NoneType'
我的代码如下。我提前为结构不佳的代码道歉。我只是一个初学者。谢谢。
def sum_dig_pow(a, b):
dict1 = {}
for k in range(a,b+1):
if k < 10:
dict1[k] = k**1
else:
num_len = int(len(str(k))) + 1
def dig_pow(k):
nonlocal num_len
num_len -= 1
if k < 10:
return k
else:
var = (k%10)**num_len + dig_pow(k//10)
dict1[k] = var
dig_pow(k)
return dict1
print(sum_dig_pow(98, 100))
【问题讨论】:
-
dig_pow在else的情况下没有明确返回任何内容,这意味着返回默认为无。你想在那里退回什么? -
5 + 9 + 64等于78,而不是7 -
@Carcigenicate,我希望 dig_pow 函数将其结果附加到字典(dict1)......该程序适用于单个和两位数,但对于上述任何内容都失败。我认为问题出在递归调用上。
-
再一次,在 else 情况下你不会返回任何东西:
... else: var = (k%10)**num_len + dig_pow(k//10); dict1[k] = var。那里没有return。每条路径都需要以返回结束。如果要使用递归,则不能将其与附加到可变对象并仅在部分时间依赖返回值混合使用。您要么使用所有突变,要么使用返回值。 -
好的,有出路吗?我如何返回?
标签: python-3.x