鱼C论坛

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

[已解决]我太难了,求教,python006讲不知理解逻辑注释正确不

[复制链接]
发表于 2020-1-7 18:47:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 cyx456 于 2020-1-7 19:02 编辑

print('--------爱因斯坦阶梯题---------')

x = 7#x是7的整数倍,假设x为7
i = 1#每次循环+1,检验

flag = 0#这里flag赋值为多少不重要
while i <= 100:#当倍数只加到一百以内时执行以下
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
        #假如上面的条件都成立,就设定flag为1,这个只是一个代表表示
        #这就是个代表式
        flag = 1
        
    else:
        #不然的话那就是上面条件不成立,继续执行下面这个
        #把x扩大倍数,最多倍数到100倍
        x = 7 * (i+1)#否则,就是x就是7的其他倍数
    i += 1#从if开始从新再+1倍算一次

#假如flag ==1的条件满足,也就是阶梯余数是对的,说明x找到了
if flag == 1:#如果没有这行,会不停的i+九十多次,为什么呢
    print('阶梯数是:',x)
else:
    print('找不到答案')#指7的一百倍以内找不到答案,
        
        
最佳答案
2020-1-7 19:42:22
你的注释基本都正确。但是if flag==1这一句这里说的不对,你的程序i会一直加到100,不管有没有最后这个if语句。你的程序还有点小问题。我不知道你是打算只在700以内找到一个呢,还是打算找700之内的所有阶梯数。
若只打算找一个:
  1. print('--------爱因斯坦阶梯题---------')

  2. x = 7#x是7的整数倍,假设x为7
  3. i = 1#每次循环+1,检验

  4. while i <= 100:#当倍数只加到一百以内时执行以下
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
  6.         #假如上面的条件都成立,直接输出
  7.         print('阶梯数是:',x)
  8.         break               #跳出循环
  9.     x = 7 * (i+1)#x加7,查看7的其他倍数
  10.     i += 1#
  11. else:
  12.     print('找不到答案')#指7的一百倍以内找不到答案
复制代码


若打算都找出来:
  1. print('--------爱因斯坦阶梯题---------')

  2. x = 7       #x是7的整数倍,假设x为7
  3. i = 1       #每次循环+1,检验
  4. flag=True   #标记,若找到了,则修改标记为False
  5. while i <= 100:#当倍数只加到一百以内时执行以下
  6.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
  7.         #假如上面的条件都成立,直接输出
  8.         print('阶梯数是:',x)
  9.         flag=False      #找到了,修改标记为Flase
  10.     x = 7 * (i+1)#x加7,查看7的其他倍数
  11.     i += 1
  12. if flag:    #查看标记,若没找到,标记为True,若找到了,标记为False
  13.     print('找不到答案')#指7的一百倍以内找不到答案
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-1-7 19:30:56 | 显示全部楼层
flag=1后面少了一个break
不然后面x不对,除非是最后一个刚好满足

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
cyx456 + 5 + 5 + 3 谢谢您的解答

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-1-7 19:41:51 | 显示全部楼层
f-wind 发表于 2020-1-7 19:30
flag=1后面少了一个break
不然后面x不对,除非是最后一个刚好满足

您好感谢您的回复,我加了break,发现运行没有区别!break,是终止这一层循环的意思吧?
这个是不是加不加都无所谓,因为if条件成立,说明x找到了,自然就不用执行else,自然执行最下面的,if flag ==1这一段?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-7 19:42:22 | 显示全部楼层    本楼为最佳答案   
你的注释基本都正确。但是if flag==1这一句这里说的不对,你的程序i会一直加到100,不管有没有最后这个if语句。你的程序还有点小问题。我不知道你是打算只在700以内找到一个呢,还是打算找700之内的所有阶梯数。
若只打算找一个:
  1. print('--------爱因斯坦阶梯题---------')

  2. x = 7#x是7的整数倍,假设x为7
  3. i = 1#每次循环+1,检验

  4. while i <= 100:#当倍数只加到一百以内时执行以下
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
  6.         #假如上面的条件都成立,直接输出
  7.         print('阶梯数是:',x)
  8.         break               #跳出循环
  9.     x = 7 * (i+1)#x加7,查看7的其他倍数
  10.     i += 1#
  11. else:
  12.     print('找不到答案')#指7的一百倍以内找不到答案
复制代码


若打算都找出来:
  1. print('--------爱因斯坦阶梯题---------')

  2. x = 7       #x是7的整数倍,假设x为7
  3. i = 1       #每次循环+1,检验
  4. flag=True   #标记,若找到了,则修改标记为False
  5. while i <= 100:#当倍数只加到一百以内时执行以下
  6.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
  7.         #假如上面的条件都成立,直接输出
  8.         print('阶梯数是:',x)
  9.         flag=False      #找到了,修改标记为Flase
  10.     x = 7 * (i+1)#x加7,查看7的其他倍数
  11.     i += 1
  12. if flag:    #查看标记,若没找到,标记为True,若找到了,标记为False
  13.     print('找不到答案')#指7的一百倍以内找不到答案
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
cyx456 + 5 + 5 + 3

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-1-7 19:50:07 | 显示全部楼层
谢谢您的详细解答,我好好琢磨
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-1-7 20:46:36 | 显示全部楼层
sunrise085 发表于 2020-1-7 19:42
你的注释基本都正确。但是if flag==1这一句这里说的不对,你的程序i会一直加到100,不管有没有最后这个if语 ...

我好像明白一些了:
第一个代码,如果只找一个答案,那么不需要标记。
找到后打印,使用break跳出循环就结束了。

第二个代码,如果找100倍以内的所有答案,
那么需要标记,当找到一个之后,再继续循环找下一个,
    x = 7 * (i+1)#x加7,查看7的其他倍数
    i += 1
他们的空格位置与上面的if并列,意思是加1倍后再从while开始执行起来吗?
如果在多一个        空格,是不是从if开始执行?我试了一下,啥也没反应了。

另外最后的if flag:语句,您是否是简化了if flag == True:写的

另外发现,原来if else不是必须两个都要有吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-1-7 21:01:28 | 显示全部楼层
cyx456 发表于 2020-1-7 20:46
我好像明白一些了:
第一个代码,如果只找一个答案,那么不需要标记。
找到后打印,使用break跳出循环 ...
第二个代码,如果找100倍以内的所有答案,
那么需要标记,当找到一个之后,再继续循环找下一个,
    x = 7 * (i+1)#x加7,查看7的其他倍数
    i += 1
他们的空格位置与上面的if并列,意思是加1倍后再从while开始执行起来吗?
如果在多一个        空格,是不是从if开始执行?我试了一下,啥也没反应了。

另外最后的if flag:语句,您是否是简化了if flag == True:写的

另外发现,原来if else不是必须两个都要有吗


1、这两句必须与if并列,不能放在if语句中。若放在if语句中,不进入if,i就一直为1,进入死循环了。
2、if flag等价与if flag==True,但不是简写,if flag  是判断flag的值是否为True,if flag==True 是判断flag==True语句是否为True。
3、if后不一定有else。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
cyx456 + 5 + 5 + 3 多谢大佬,除了评分唯有以身相许,有需要说.

查看全部评分

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

使用道具 举报

 楼主| 发表于 2020-1-7 21:31:41 | 显示全部楼层
sunrise085 发表于 2020-1-7 21:01
1、这两句必须与if并列,不能放在if语句中。若放在if语句中,不进入if,i就一直为1,进入死循环了。
...
  1. print('--------爱因斯坦阶梯题---------')

  2. x = 7       #x是7的整数倍,假设x为7
  3. i = 1       #每次循环+1,检验
  4. flag=True   #标记,若找到了,则修改标记为False
  5. while i <= 100:#当倍数只加到一百以内时执行以下
  6.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):
  7.         #假如上面的条件都成立,直接输出
  8.         print('阶梯数是:',x)
  9.         flag=False      #找到了,修改标记为Flase
  10.     x = 7 * (i+1)#x加7,查看7的其他倍数
  11.     i += 1
  12. if flag:    #查看标记,若没找到,标记为True,若找到了,标记为False
  13.     print('找不到答案')#指7的一百倍以内找不到答案
复制代码


原来如此,懂了:
        假如    x = 7 * (i+1)#x加7,查看7的其他倍数
                      i += 1
这句在上面的if 语句中,第一次运行循环时x为7,上面的if条件肯定是不成立的,自然下面的就无法执行下去了,
所以i就一直为1了,就死在那里不动了。
因为while的设定是100倍以内都要执行,所以一直在那里跳不过去了,也就无法执行下面的‘’找不到答案‘’
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-3 06:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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