鱼C论坛

 找回密码
 立即注册
查看: 1340|回复: 6

[已解决]小白作业求助

[复制链接]
发表于 2019-9-30 09:48:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数temp=0
for each in range(100,999):
    for i in each:
        int(i)
            temp=temp+i**3
    if temp==each:
        print(temp,end=' ')
    else:
        temp=0
问题出在哪里。。蟹蟹大佬们
最佳答案
2019-9-30 10:13:56
首先,each是 100~998之间的整数。你的第二个for循环(for i in each),首先语法错误。需要写成,for i in range(each),比如each = 200,其指代意思为i 取 0~ 199之间的数。int(i),就是整形化对象,第三句,tmp = tmp + i**3, tmp 未定义引用。如果要正确的,我发给你。可能你也有,最后提一点,即使执行else,tmp = 0也不会输出,你也不知道结果。望采纳!
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 地板除
    if sum == i:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-9-30 10:01:18 | 显示全部楼层
你的 i 第一轮是零至一百,这有什么用?你要把each的每一位数分离出来。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-30 10:04:47 | 显示全部楼层
本帖最后由 yjsx86 于 2019-9-30 10:06 编辑

错误有点多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-30 10:13:56 | 显示全部楼层    本楼为最佳答案   
首先,each是 100~998之间的整数。你的第二个for循环(for i in each),首先语法错误。需要写成,for i in range(each),比如each = 200,其指代意思为i 取 0~ 199之间的数。int(i),就是整形化对象,第三句,tmp = tmp + i**3, tmp 未定义引用。如果要正确的,我发给你。可能你也有,最后提一点,即使执行else,tmp = 0也不会输出,你也不知道结果。望采纳!
for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum = sum + (temp%10) ** 3
        temp //= 10         # 地板除
    if sum == i:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-30 10:14:38 | 显示全部楼层
问题很多啊,你首先要把三位数的,百位,十位,各位都分离出来,3次方之后,相加。正确代码,你参考下:
  1. for i in range(100,999):
  2.         gewei = i % 10
  3.         shiwei = i //10 %10
  4.         baiwei = i // 100
  5.         if gewei ** 3 +shiwei**3+baiwei**3 == i:
  6.                 print(i)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-30 14:20:31 | 显示全部楼层
本帖最后由 jackz007 于 2019-9-30 14:29 编辑

      用 range() 表达的 3 位数范围应该是 range(100 , 1000)

      这个代码要这样写:

  1. for each in range(100 , 1000):
  2.     temp , sum = each , 0
  3.     while temp:
  4.         sum += (temp % 10) ** 3
  5.         temp //= 10
  6.     if each == sum :
  7.         print(each)
复制代码


      当然,也可以写的更加简单直接:

  1. for each in range(100 , 1000):
  2.     if each == (each // 100) ** 3 + ((each % 100) // 10) ** 3 + (each % 10) ** 3 :
  3.         print(each)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-9-30 17:44:20 | 显示全部楼层
错误有点多,帮你改了一下:
  1. for each in range(100, 999):
  2.     temp = 0
  3.     for index, i in enumerate(str(each), 1):
  4.         i = int(i)
  5.         temp += i ** 3
  6.     if temp == each:
  7.         print(temp, end=' ')
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-8 13:49

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表