【问题标题】:My code gives me numbers in the wrong order我的代码以错误的顺序给了我数字
【发布时间】:2019-09-17 23:02:24
【问题描述】:

我想知道 100-1000 之间的数字,每个数字 ^3 的交叉和等于数字本身。

例如

3^3 + 7^3 + 1^3 = 371

我的代码给了我数字,但不是升序。我做错了什么?

代码:

numbers=list(range(101,1000))  

for item in numbers:           
    sum=0                      
    sum2=""                    
    while item:                
            d=item%10          
            item=item//10      
            sum=(sum+d**3)     
            sum2=sum2+str(d)   
    if sum==int(sum2):         
        print(sum2)

结果:

371
153
407

【问题讨论】:

  • 取一个简单的数字,比如 e。 G。 17 作为项目,看看 sum2 会发生什么。

标签: python loops for-loop while-loop range


【解决方案1】:

这里有一个简单的 oneliner 可以解决您的特定问题:

[n for n in range(101, 1000) if sum([int(v)**3 for v in list(str(n))]) == n]

【讨论】:

  • 我觉得自己太笨了,看不懂你的代码。但是一旦我在编码方面做得更好,我会再看一遍:)谢谢!
【解决方案2】:

您应该将迭代的数字与立方数字的总和进行比较:

numbers = list(range(101, 1000))
for item in numbers:
    sum = 0
    number = item
    while number:
        d = number % 10
        number = number // 10
        sum = (sum + d ** 3)
    if sum == item:
        print(item)

这个输出:

153
370
371
407

【讨论】:

  • 非常感谢!!!这解决了我的问题。总而言之,你将 number=item 放在 while 循环之前,这样你就有了第二个变量(number),它可以在循环中改变,同时还有“item”,你最终将它与“sum”进行比较。跨度>
【解决方案3】:

你可以做一个更简单的方法:

numbers=list(range(101,1000))  

for num in numbers:
    product = sum([int(x)**3 for x in str(num)])
    if product == num:
        print(num)

输出:

153
370
371
407

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-26
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-08-09
    • 1970-01-01
    相关资源
    最近更新 更多