gpt4 book ai didi

python - 取一个数字并对其数字求和

转载 作者:太空宇宙 更新时间:2023-11-03 15:15:25 27 4
gpt4 key购买 nike

我正在研究这个 Kata,尽管我已经查看了解决方案,但没有一个与我的解决方案非常相似,足以回答我的问题。

问题文本:数字 89 是第一个多于一位的整数,满足此型标题中部分介绍的属性。说“ Eureka ”有什么用?因为这个总和给出了相同的数字。

实际效果:89 = 8^1 + 9^2

拥有此属性的下一个数字是 135。

再次查看此属性:135 = 1^1 + 3^2 + 5^3

我们需要一个函数来收集这些数字,它可以接收两个整数 a, b,定义范围 [a, b](含),并输出满足上述属性的范围内排序数字的列表。

def sum_dig_pow(a, b): # range(a, b + 1) will be studied by the function
# your code here
lst = []
n = 1
tot = 0
for i in range(a,b):
if i > 9:
spl = str(i).split()
for item in spl:
tot += int(item) ** n
n += 1
if tot == i:
lst.append(i)
else:
lst.append(i)
return lst

测试返回“[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 应该等于 [1, 2, 3, 4, 5, 6, 7, 8, 9, 89 ]”。我不明白为什么它传递了 10 而不是附加 89。我确信还有一种更有效的方法可以做到这一点,但我仍在学习,所以想学习循环、条件等基础知识。

最佳答案

此行不正确:

spl = str(i).split()

split 方法默认会按空格分割字符串并返回一个列表。因此,传递 i=10 会返回 spl = ['10'],这是一个包含一个元素的列表。相反,只需迭代字符串中的每个数字即可。

for item in str(i):
...
<小时/>

后续:您可以通过使用enumerate来计算每个数字的索引来缩短代码。

def sum_dig_pow(a,b):
return [sum(int(y)**(i+1) for i,y in enumerate(str(x))) for x in range(a,b)]

关于python - 取一个数字并对其数字求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43927030/

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