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

标签 python control-flow

我正在研究这个 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/

相关文章:

python - 相当于 Python 在 Ruby 中的 "with"

javascript - 为什么要执行这个函数?

python - 使用 pip install --editable 更改 .egg-info 目录

objective-c - Main 中 UIApplicationMain 之后的 Objective C 执行顺序是什么?

ios - NSNotification 和控制流

C++ 代码在没有优化的情况下被奇怪地跳过。任何想法为什么?

python - 'TypeError' 类型的对象不是 JSON 可序列化的

python - 属性错误: 'WSGIRequest' object has no attribute 'status_code'

python - 如何在存储在列表中的字典中搜索值

python - 是否有 Matlab "stem3"的 matplotlib 副本?