def sum_dig_pow(a, b):
return [i for i in range(a, b + 1) if sum([int(x) ** (str(i).index(x) + 1) for x in str(i)]) == i]
sum_dig_pow(1, 2000) 得到 1 到 1306 的所有答案,然后没有高于此的答案?
最佳答案
我认为,您的代码不起作用,因为缺少的解决方案 1676 包含 6 的两倍。因此 str(i).index(x)
将为第二个 6 返回错误的索引这使得计算错误。
我想,这是一次,我在没有列表理解的情况下开始,首先让代码工作。这通常是您想要的结果吗?
def sum_dig_pow(a, b):
result = []
for number in range(a, b+1):
calculation = 0
for position, digit in enumerate(map(int, str(number))):
calculation += digit**(position + 1)
if calculation == number:
result += [number]
return result
print(sum_dig_pow(1, 2000))
打印内容:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 135, 175, 518, 598, 1306, 1676]
然后将其减少为:
def sum_dig_pow(a, b):
result = []
for number in range(a, b+1):
calculation = sum([digit**(position + 1) for position, digit in enumerate(map(int, str(number)))])
if calculation == number:
result += [number]
return result
然后:
def sum_dig_pow(a, b):
return [number for number in range(a, b+1) if sum([digit**(position + 1) for position, digit in enumerate(map(int, str(number)))]) == number]
但我认为为什么你只想用列表理解来写这个仍然是个问题?那么你至少可以使用一句单行话;-)
sum_dig_pow = lambda a, b: [number for number in range(a, b+1) if sum([digit**(position + 1) for position, digit in enumerate(map(int, str(number)))]) == number]
关于python - 查找数字^(数字位置)==原始数字即(89 = 8^1 + 9^2)的数字,但代码不会返回高于1306的任何数字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53771277/