鱼C论坛

 找回密码
 立即注册
查看: 1366|回复: 18

[已解决]想知道在课后习题:解决爱因斯坦的台阶问题上面这个有什么问题

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

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

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

x
print("--------------爱因斯坦的数学题---------------------")
i = 1
num = i
while (num % 2 == 1) and (num % 3 == 2) and (num % 5 == 4) and (num % 6 == 5) and (num % 7 == 0):
    break
    i = i + 1
    num = i
print(num)


不好意思啊,我是新人,不知道怎么发你们那种格式,你们看着很费劲吧,真的不好意思
我这个运行之后打出来是 1 ,很明显是错误的
希望有好人可以帮我指正一下,万分感谢
最佳答案
2020-3-11 11:55:49
一进入循环就 break 了,num 根本不会改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-11 10:04:52 | 显示全部楼层
代码这样写:
for num in range(7, 700):
    if (num % 2 == 1) and (num % 3 == 2) and (num % 5 == 4) and (num % 6 == 5) and (num % 7 == 0):
        print(num)
        break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-11 10:14:03 | 显示全部楼层
按你的写法改的
print("--------------爱因斯坦的数学题---------------------")
i = 1
num = i
while True:
    if (num % 2 == 1) and (num % 3 == 2) and (num % 5 == 4) and (num % 6 == 5) and (num % 7 == 0):
        break
    i = i + 1
    num = i
print(num)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 10:26:45 | 显示全部楼层
print("--------------爱因斯坦的数学题---------------------")
for i in range(7 , 700 , 7):
    if i % 2 == 1 and i % 3 == 2 and i % 5 == 4 and i % 6 == 5:
        print(i)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 11:35:59 | 显示全部楼层

请问怎么发您这种格式的代码?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 11:38:15 | 显示全部楼层
kkk999de 发表于 2020-3-11 11:35
请问怎么发您这种格式的代码?

发帖子的上面有一个<>,点一下,把代码粘贴进去
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 11:39:58 | 显示全部楼层
qiuyouzhi 发表于 2020-3-11 11:38
发帖子的上面有一个,点一下,把代码粘贴进去

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

使用道具 举报

发表于 2020-3-11 11:41:15 | 显示全部楼层

那就设置一个最佳答案吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 11:55:49 | 显示全部楼层    本楼为最佳答案   
一进入循环就 break 了,num 根本不会改变
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-11 16:33:55 | 显示全部楼层
zltzlt 发表于 2020-3-11 11:55
一进入循环就 break 了,num 根本不会改变

不是只有在满足上面不等式的情况下才会break吗,如果不满足要自动跳到break后面的代码
我的初衷是这个,不知道里面出了什么问题,还是不太明白
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-11 16:37:15 | 显示全部楼层

为什么要限定条件range(7,700)?可以再请教下700的来历吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 16:54:36 | 显示全部楼层
嘉伦放心飞 发表于 2020-3-11 16:37
为什么要限定条件range(7,700)?可以再请教下700的来历吗

700 只是结尾的数字,可以设置成其他的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 16:55:01 | 显示全部楼层
嘉伦放心飞 发表于 2020-3-11 16:33
不是只有在满足上面不等式的情况下才会break吗,如果不满足要自动跳到break后面的代码
我的初衷是这个, ...

并不是,你一进入循环就已经 break 了,因为循环中有 break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-11 17:16:11 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-11 17:22 编辑
嘉伦放心飞 发表于 2020-3-11 16:37
为什么要限定条件range(7,700)?可以再请教下700的来历吗


       使用枚举法必然需要有个数值的搜索范围,700 是这个范围的上限,从 7 开始,每次加 7 是因为在题目条件中有说,这个台阶数是 7 的倍数,所以,就没有必要再去枚举那些不是 7 的倍数的数值了,正因为如此,在条件判断中,能被 7 整除就多余了,我就把它删掉了。这样做,可以少枚举很多数,效率会高一些。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-12 09:54:59 | 显示全部楼层
jackz007 发表于 2020-3-11 17:16
使用枚举法必然需要有个数值的搜索范围,700 是这个范围的上限,从 7 开始,每次加 7 是因为在 ...

我还是有点儿不理解,700是上限是指..?
我看到小甲鱼的答案里面也是设置了上限是700 ,题目中没有提到700,我,想不通为什么我们在还没算出来的情况下,就知道要设上限700。万一台阶数是1000呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 10:06:20 | 显示全部楼层
本帖最后由 jackz007 于 2020-3-12 10:11 编辑
嘉伦放心飞 发表于 2020-3-12 09:54
我还是有点儿不理解,700是上限是指..?
我看到小甲鱼的答案里面也是设置了上限是700 ,题目中没有提到70 ...


      上限的意思当然是指从 7 开始,枚举到 700 结束,找到多少个就显示多少个,如果没有找到,那就不显示。
      你当然可以不设上限,从 7 开始,找到为止:
print("--------------爱因斯坦的数学题---------------------")
i = 7
while True:
    if i % 2 == 1 and i % 3 == 2 and i % 5 == 4 and i % 6 == 5:
        print(i)
        break
    i += 7
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-3-12 10:33:00 | 显示全部楼层
本帖最后由 tame47 于 2020-3-12 10:37 编辑

你的代码是while下的所有条件都满足才开始循环,但题目是不满足所有的要求才循环,一旦找到满足所有条件的数字跳出循环。所以,while后面要加not,注意not后面要用()把所有and条件包起来。我也是新人,一同探讨。
a = 0
while not (( a % 2 == 1) and ( a % 3 == 2 ) and (a % 5 == 4) and ( a % 6 == 5) and (a % 7 == 0)) :
    a += 1
print(a)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 11:25:12 | 显示全部楼层
嘉伦放心飞 发表于 2020-3-11 16:33
不是只有在满足上面不等式的情况下才会break吗,如果不满足要自动跳到break后面的代码
我的初衷是这个, ...

如果不符合上面的表达式什么也不会做,符合的话,直接break还是什么也不会做
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-3-13 16:29:18 | 显示全部楼层
jackz007 发表于 2020-3-12 10:06
上限的意思当然是指从 7 开始,枚举到 700 结束,找到多少个就显示多少个,如果没有找到,那就不 ...

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-24 20:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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