gpt4 book ai didi

python - 查找数字^(数字位置)==原始数字即(89 = 8^1 + 9^2)的数字,但代码不会返回高于1306的任何数字?

转载 作者:行者123 更新时间:2023-12-01 08:34:58 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com