鱼C论坛

 找回密码
 立即注册
查看: 3310|回复: 5

[已解决]有关1000以内找到对应数字的问题,小白求助!

[复制链接]
发表于 2020-3-3 17:17:43 | 显示全部楼层 |阅读模式

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

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

x
i = 1
while i <= 1000:
    while not (i%2 == 1 and i%3 == 2 and i%5 == 4 and i%6 == 5 and i%7 == 0):
        i = i+1
    else:
        print(i)
        i=i+1
else:
    print("done")
   
明明是找1000以内的数,可是为什么答案会是这样:
119
329
539
749
959
1169
done
把1000换成别的数,每次都是恰好多一个在限制范围外的数

请各位大佬解答
最佳答案
2020-3-3 17:21:40
把 while 改成 if 即可(不需要循环):

  1. i = 1
  2. while i <= 1000:
  3.     if not (i % 2 == 1 and i % 3 == 2 and i % 5 == 4 and i % 6 == 5 and i % 7 == 0):
  4.         i = i + 1
  5.     else:
  6.         print(i)
  7.         i = i + 1
  8. else:
  9.     print("done")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-3 17:21:40 | 显示全部楼层    本楼为最佳答案   
把 while 改成 if 即可(不需要循环):

  1. i = 1
  2. while i <= 1000:
  3.     if not (i % 2 == 1 and i % 3 == 2 and i % 5 == 4 and i % 6 == 5 and i % 7 == 0):
  4.         i = i + 1
  5.     else:
  6.         print(i)
  7.         i = i + 1
  8. else:
  9.     print("done")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 17:23:16 | 显示全部楼层
双while!?一个就够了
  1. i = 1
  2. while i <= 1000:
  3.     if not (i % 2 == 1 and i % 3 == 2 and i % 5 == 4 and i % 6 == 5 and i % 7 == 0):
  4.         i = i + 1
  5.     else:
  6.         print(i)
  7.         i = i + 1
  8. else:
  9.     print("done")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-3 17:54:04 | 显示全部楼层
你的本意是想找出1000以内的数,但是为什么会多出一个“1169”,原因如下:
当i取959之后,执行了else后面语句,此时i 的值变为960。根据结果来看这个960满足你第二次循环的那个条件(即while not那个语句),因此i就会一直加1。问题就出现在这,它一直加1的过程中当i = 1000(这里i=1000只是举个例子,从结果来看i取960---1168这些值都没有跳出循环)的时候都没能跳出你的这个while(第二个while)循环,i就会一直加1,所以i就会取到1000以外的值。
再就是不需要用到两个while,上面大佬们的代码你可以看看。还有就是如果你非要用两个while的话,你需要在第二个while里再加上一个i<=1000的条件,让它跳出循环这样就不会取到1000之外的数了,你可以自己修改修改代码。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 18:16:46 | 显示全部楼层
懂了,谢谢各位大佬!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-3 18:21:33 | 显示全部楼层
百分号 发表于 2020-3-3 17:54
你的本意是想找出1000以内的数,但是为什么会多出一个“1169”,原因如下:
当i取959之后,执行了else后面 ...

可是理论上,这样的话会一直困在第二个while里面吧,就是在1169的时候也不会判定第一个while。还是每次i+1,外面的while都会判定?如果不是每次都判定的话,为什么在1169的时候才会判定呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-1 11:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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