鱼C论坛

 找回密码
 立即注册
查看: 1526|回复: 9

[已解决]程序运行无结果的疑问

[复制链接]
发表于 2017-11-6 06:18:11 | 显示全部楼层 |阅读模式

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

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

x
搞不懂为什么有些代码写出来,运行不出结果~~问题出在哪里,求指点~~
QQ截图20171106061806.png
最佳答案
2017-11-6 10:17:14
首先是x,y,z的赋值运算要在循环体内部,不然while循环只进行了一次的立方和运算,然后就不停的i+=1,最后退出。

然后是缩进问题。

正确代码应该是:
  1. i = 100
  2. while i < = 999:
  3.     x = int(i/100)
  4.     y = int((i-x*100)/10)
  5.     z = int(i%10)
  6.     if i == x**3 + y**3 +z**3:
  7.         print(i)
  8.     i += 1
复制代码




想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-11-6 06:58:29 From FishC Mobile | 显示全部楼层
i += 1缩进不对,导致while死循环

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

使用道具 举报

发表于 2017-11-6 09:20:40 | 显示全部楼层
如楼上所述会进入死循环,而且,即使缩进没问题了,x的值是1,y的值是90,z的值是0,三者的次方加起来是729001,怎么也比999大,所以程序跑了一遍也不会输出啥
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-6 10:17:14 | 显示全部楼层    本楼为最佳答案   
首先是x,y,z的赋值运算要在循环体内部,不然while循环只进行了一次的立方和运算,然后就不停的i+=1,最后退出。

然后是缩进问题。

正确代码应该是:
  1. i = 100
  2. while i < = 999:
  3.     x = int(i/100)
  4.     y = int((i-x*100)/10)
  5.     z = int(i%10)
  6.     if i == x**3 + y**3 +z**3:
  7.         print(i)
  8.     i += 1
复制代码




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

使用道具 举报

 楼主| 发表于 2017-11-7 05:49:16 | 显示全部楼层
你说的对,不仅仅是缩进的问题,还要把x, y, z的定义放到循环体内去。。
可是我不太理解这个x, y, z要放到循环体内的要求。。不放进去,难道第二次循环时,就不执行这个代码了吗? 我在最开始已经定义好了啊~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-11-7 06:06:18 | 显示全部楼层
铁棍阿童木 发表于 2017-11-6 10:17
首先是x,y,z的赋值运算要在循环体内部,不然while循环只进行了一次的立方和运算,然后就不停的i+=1,最后 ...

360截图20171107060603539.jpg

这个代码无法运行的问题又是什么~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-7 10:20:32 | 显示全部楼层
本帖最后由 铁棍阿童木 于 2017-11-7 10:36 编辑
老笨啊 发表于 2017-11-7 05:49
你说的对,不仅仅是缩进的问题,还要把x, y, z的定义放到循环体内去。。
可是我不太理解这个x, y, z要放到 ...


你不放入循环体内部,x,y,z的初始值永远不会被改变啊,所以while循环是死循环,而且不做任何运算。因为 i 永远不会等于x,y,z的立方和。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-7 11:24:03 | 显示全部楼层
老笨啊 发表于 2017-11-7 06:06
这个代码无法运行的问题又是什么~~

这个好像是解决爱因斯坦阶梯问题!
你在这里不能用 s 的值来控制while循环,因为一旦 s 符合条件就会进入死循环。
  1. # 爱因斯坦阶梯问题
  2. steps = 7
  3. x = 1
  4. einstein = 0
  5. while x <= 100:
  6.     if (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5):
  7.         einstein = 1
  8.     else:
  9.         steps += 7
  10.     x += 1
  11. if einstein == 1:
  12.     print("最少需要 " + str(steps) + " 级台阶才能解决爱因斯坦难题!")
  13. else:
  14.     print("在程序范围内无正确解!")
复制代码


如果你非要用台阶数来控制while循环体,那么print语句就要在循环体内部,并且要用break语句来终止循环。
  1. s = 7
  2. i = 0
  3. while s <= 10000:
  4.     if (s%2==1) and (s%3==2) and (s%5==4) and (s%6==5):
  5.         print("阶梯数是:",s)
  6.         break
  7.     else:
  8.         s = s + 7
  9. else:
  10.     print("程序范围内找不到答案!")
复制代码


你可以复制代码,现在 s 的值是10000,然后修改 s 的值到100看看结果有什么不同。

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

使用道具 举报

 楼主| 发表于 2017-11-8 05:46:16 | 显示全部楼层
本帖最后由 老笨啊 于 2017-11-8 06:04 编辑
铁棍阿童木 发表于 2017-11-7 11:24
这个好像是解决爱因斯坦阶梯问题!
你在这里不能用 s 的值来控制while循环,因为一旦 s 符合条件就会进 ...


多谢你的解答。
我对你的答复,有两个疑问:
222.jpg 111.jpg
另外,关于这个阶梯问题,如果非要用台阶数来控制while,那把print放在循环体内后,如果实际答案有两个以上,而最终结果只能实现一个就结束循环的情况?
你的说法,基本都解决了我的错误。我有点不懂的是,你是如何来判断应该怎么做的,为什么我会做错?是没有编写流程图,还是我自身的逻辑思维能力还不够呢~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-11-9 08:48:36 From FishC Mobile | 显示全部楼层
如果你想输出10000以内所有的阶梯数,那么就把第二段程序中print语句后面的break去掉。那个s = 0没用,我没删干净。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 08:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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