鱼C论坛

 找回密码
 立即注册
查看: 2469|回复: 7

[已解决]请大佬指点一下!

[复制链接]
发表于 2020-1-9 16:59:52 | 显示全部楼层 |阅读模式

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

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

x
一道课后作业题
编写一个程序,求 100~999 之间的所有水仙花数。( 如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数。)
这个是我的答案:

for i in range(100,1000):
    while i :
        a = i / 100
        b = ( i / 10 ) - ( a * 10 )
        c = i - ( a * 100 ) - ( b * 10 )
        d = a ** 3 + b ** 3 + c ** 3
    if i == d:
        print(i)

想问一下为什么打印不出结果 谢谢大佬了
最佳答案
2020-1-9 17:36:17
  1. for i in range(100,1000):
  2.     while i :
  3.         a = i //100
  4.         b = ( i // 10 ) - ( a * 10 )
  5.         c = i - ( a * 100 ) - ( b * 10 )
  6.         d = a ** 3 + b ** 3 + c ** 3
  7.         if i == d:
  8.             print(i)
  9.             break
  10.         else:
  11.             break
复制代码

在你的代码基础上修改了一下你的代码,打印不出结果的原因有下列几个:
1.你的while循环里没有让这个循环停止的条件。
2.你的代码里if应该在while的循环体里面。(就算你放进了循环体里但是也没有让while这个循环体跳出来进行下一步----比如说 i 取了100之后,它进入了while这个循环体,这个 i(100)很明显不是你要的值,你的本意是想就不要这个i的值,让它继续去取后面的值(也就是进行下一次for循环)。问题就在于你的代码中没有让while这个循环停下来让for循环进行下一次i的赋值,当然就不行啦,所以你的代码中我就加入了两个break。之所以是两个是因为当 i 是水仙花数的时候需要跳出来,不是的时候也要跳出来)
3.我的python是3.7.4版本的,‘/’是真正的除法,比如输入153/100,输出的结果是1.53,不是1;输入153//100,输出的结果才是1
4.while循环用的很多余。你可以自己尝试去掉while再写一个看看
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-1-9 17:06:42 From FishC Mobile | 显示全部楼层
光看你这个排版,缩进不对啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 17:08:22 | 显示全部楼层
本帖最后由 jackz007 于 2020-1-10 10:06 编辑
  1.     while i :
  2.         a = i / 100
  3.         b = ( i / 10 ) - ( a * 10 )
  4.         c = i - ( a * 100 ) - ( b * 10 )
  5.         d = a ** 3 + b ** 3 + c ** 3
复制代码

      这个 while i,只要 i 的值不为 0 就会循环,在循环内 i 却始终不改变,铁定死循环啊!
      必须去掉这个 while 循环,试试下面的代码:
  1. for i in range(100,1000):
  2.     a = i // 100
  3.     b = (i % 100 ) // 10
  4.     c = i % 10
  5.     d = a ** 3 + b ** 3 + c ** 3
  6.     if i == d:
  7.         print(i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 17:36:17 | 显示全部楼层    本楼为最佳答案   
  1. for i in range(100,1000):
  2.     while i :
  3.         a = i //100
  4.         b = ( i // 10 ) - ( a * 10 )
  5.         c = i - ( a * 100 ) - ( b * 10 )
  6.         d = a ** 3 + b ** 3 + c ** 3
  7.         if i == d:
  8.             print(i)
  9.             break
  10.         else:
  11.             break
复制代码

在你的代码基础上修改了一下你的代码,打印不出结果的原因有下列几个:
1.你的while循环里没有让这个循环停止的条件。
2.你的代码里if应该在while的循环体里面。(就算你放进了循环体里但是也没有让while这个循环体跳出来进行下一步----比如说 i 取了100之后,它进入了while这个循环体,这个 i(100)很明显不是你要的值,你的本意是想就不要这个i的值,让它继续去取后面的值(也就是进行下一次for循环)。问题就在于你的代码中没有让while这个循环停下来让for循环进行下一次i的赋值,当然就不行啦,所以你的代码中我就加入了两个break。之所以是两个是因为当 i 是水仙花数的时候需要跳出来,不是的时候也要跳出来)
3.我的python是3.7.4版本的,‘/’是真正的除法,比如输入153/100,输出的结果是1.53,不是1;输入153//100,输出的结果才是1
4.while循环用的很多余。你可以自己尝试去掉while再写一个看看
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-9 17:40:36 | 显示全部楼层
不出结果有两个问题。
第一,多了一层while循环,直接for循环就够了,while循环没有停止条件,无法结束,在这也没必要while循环;
第二,a=i/100是不对的,你这一些得到的a可能是小数而非百位的值,应该用a=i//100,b = ( i / 10 ) - ( a * 10 )也应该修改为b = ( i // 10 ) - ( a * 10 )。
在你程序的基础上帮你修改了。
  1. for i in range(100,1000):
  2.     a = i // 100
  3.     b = ( i // 10 ) - ( a * 10 )
  4.     c = i - ( a * 100 ) - ( b * 10 )
  5.     d = a ** 3 + b ** 3 + c ** 3
  6.     if i == d:
  7.         print(i)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-10 09:24:20 | 显示全部楼层
百分号 发表于 2020-1-9 17:36
在你的代码基础上修改了一下你的代码,打印不出结果的原因有下列几个:
1.你的while循环里没有让这个循 ...

谢谢大佬!懂了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-10 09:27:53 | 显示全部楼层
sunrise085 发表于 2020-1-9 17:40
不出结果有两个问题。
第一,多了一层while循环,直接for循环就够了,while循环没有停止条件,无法结束, ...

谢谢大佬!懂了!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-10 09:31:14 | 显示全部楼层
jackz007 发表于 2020-1-9 17:08
这个 while i,只要 i 的值不为 0 就会循环,在循环内 i 却始终不改变,铁定死循环啊!
      必须 ...

谢谢大佬!大佬你的a那里少了一个/ 补上就对了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-3 08:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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