鱼C论坛

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

[已解决]关于006讲课后作业第二问中无限循环的相关问题

[复制链接]
发表于 2021-5-28 05:55:44 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 fc5igm 于 2021-5-28 10:49 编辑

课后答案为
  1. score = input("请输入你的分数:")

  2. while score != 'e':
  3.     score = int(score)

  4.     if score < 60:
  5.         print("D")

  6.     if 60 <= score < 80:
  7.         print("C")

  8.     if 80 <= score < 90:
  9.         print("B")

  10.     if 90 <= score < 100:
  11.         print("A")

  12.     if score == 100:
  13.         print("S")

  14.     score = input("请输入你的分数:")
复制代码

末尾再次出现的input语句我可以理解是为了避免无限循环而作的。
  1. '''06讲动动手'''
  2. while 1==1:
  3.     x=input('请输入你的分数:')
  4.     if x=='e':
  5.         break
  6.     else:
  7.         x=int(x)

  8.         if x<60:
  9.             print('D')
  10.         else:
  11.             if x<80:
  12.                 print('C')
  13.             else:
  14.                 if x<90:
  15.                     print('B')
  16.                 else:
  17.                     if x<100:
  18.                         print('A')
  19.                     else:
  20.                         if x==100:
  21.                             print('S')
复制代码

上面是我自行写的解答。我的答案末尾并没有加入input语句,但也并没有出现无限死循环,产生了和标答一样的效果。
请问原因是什么?
我自行写出来的这个代码是在哪里打断了代码自身的死循环呢?
我所指的“死循环”效果如图
QQ截图20210528104148.png
最佳答案
2021-5-28 11:01:55
fc5igm 发表于 2021-5-28 10:47
如果将

中的最后一行的删除,就会出现图片所述的这个效果。

小甲鱼的答案中
在while外有一次score的赋值操作
score = input("请输入你的分数:")
之后再进入循环
并且在循环的最后结尾也是
score = input("请输入你的分数:")
这一行代码的作用不是为了终止循环。循环还在继续,只是你还没有完成赋值操作,程序在等待而已(程序未中断,循环未中断)


你写的答案
第三行x=input('请输入你的分数:')
将赋值操作放在了循环中的第一个语句
跟小甲鱼放在循环结尾本质上都是一样的(为了下次循环的开始)
修改你的代码后,在循环前做一次赋值操作,可以造成和小甲鱼一样的效果
  1. '''06讲动动手'''

  2. x = input('请输入你的分数:')
  3. while 1==1:
  4.     if x=='e':
  5.         break
  6.     else:
  7.         x=int(x)

  8.         if x<60:
  9.             print('D')
  10.         else:
  11.             if x<80:
  12.                 print('C')
  13.             else:
  14.                 if x<90:
  15.                     print('B')
  16.                 else:
  17.                     if x<100:
  18.                         print('A')
  19.                     else:
  20.                         if x==100:
  21.                             print('S')
  22.     x=input('请输入你的分数:')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-5-28 07:35:02 From FishC Mobile | 显示全部楼层
因为你的答案有break可以终止循环
类似于课后作业的while score != 'e'
前6将有可能没有教break所以才那样写吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-28 08:12:45 | 显示全部楼层
原答案中末尾再次出现的input语句我可以理解是为了避免无限循环而作的。
上面这句话理解是错误的。

原答案中,while循环的判断语句为while score != 'e':
当score == 'e'时,条件不满足score != 'e'会终止循环
结尾的input只是为下次的循环而准备的

你的答案在最开始判断是
  1. if x=='e':
  2.         break
复制代码

当x == 'e'时,满足if条件
执行break关键词
终止了while的循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-28 09:03:00 | 显示全部楼层
本帖最后由 Peteryo01223 于 2021-5-28 10:16 编辑

小甲鱼的视频很好,但有些本质的问题,解释不够,会导致越是有思考能力的初学者,越容易困扰。

关于你问的:
问题1:末尾再次出现的 input 语句,我可以理解是为了避免无限循环而作的。
答: 可以,或者理解为,每次用 input() 来控制 python 运行的节奏。既可以让程序运行一次就停下来等待命令,又可以不断地重复运行;

问题2:我的答案末尾并没有加入 input 语句,但也并没有出现无限死循环,产生了和标答一样的效果。请问原因是什么?
答:因为你俩的 while 循环内部,都有、且只有一个 input 函数来控制程序运行的节奏,即:你们分别用 input() 给 x 和 score 赋值,效果一样的,你放在了前面,他放在了最后。FishC 在 while 外,提前用了一个 score = input(),并不影响你俩 while 里面的一致性;

问题3:我自行写出来的这个代码,是在哪里打断了代码自身的死循环呢?
答:两个地方,一,是在每次 while 循环时,x = input() 这一句,控制了节奏,必须停在那里等待输入。二,是在 break 这个动作被执行的时候,就彻底结束了。

你用了 else 呼应 if,符合python的原旨原意,挺好的,他没有用 else,也挺棒,因为灵活、水平高。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-28 10:47:25 | 显示全部楼层
逃兵 发表于 2021-5-28 08:12
原答案中末尾再次出现的input语句我可以理解是为了避免无限循环而作的。
上面这句话理解是错误的。

QQ截图20210528104148.png

如果将
  1. score = input("请输入你的分数:")

  2. while score != 'e':
  3.     score = int(score)

  4.     if score < 60:
  5.         print("D")

  6.     if 60 <= score < 80:
  7.         print("C")

  8.     if 80 <= score < 90:
  9.         print("B")

  10.     if 90 <= score < 100:
  11.         print("A")

  12.     if score == 100:
  13.         print("S")

  14.     score = input("请输入你的分数:")
复制代码

中的最后一行的
  1. score = input("请输入你的分数:")
复制代码
删除,就会出现图片所述的这个效果。
我认为正是这行代码避免了对答案无限循环的重复出现。
我重新审视了我 自己做的原代码,貌似没有看到可以避免图片效果的代码。但是实际情况上却是的确做到了避免图片上的情况发生。
所以我的问题就是,我的这个原答案
  1. '''06讲动动手'''
  2. while 1==1:
  3.     x=input('请输入你的分数:')
  4.     if x=='e':
  5.         break
  6.     else:
  7.         x=int(x)

  8.         if x<60:
  9.             print('D')
  10.         else:
  11.             if x<80:
  12.                 print('C')
  13.             else:
  14.                 if x<90:
  15.                     print('B')
  16.                 else:
  17.                     if x<100:
  18.                         print('A')
  19.                     else:
  20.                         if x==100:
  21.                             print('S')
复制代码

中,请问是哪一行的代码发挥了标答尾行中
  1. score = input("请输入你的分数:")
复制代码
的作用,从而成功避免了图片上的情况发生?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-28 11:01:55 | 显示全部楼层    本楼为最佳答案   
fc5igm 发表于 2021-5-28 10:47
如果将

中的最后一行的删除,就会出现图片所述的这个效果。

小甲鱼的答案中
在while外有一次score的赋值操作
score = input("请输入你的分数:")
之后再进入循环
并且在循环的最后结尾也是
score = input("请输入你的分数:")
这一行代码的作用不是为了终止循环。循环还在继续,只是你还没有完成赋值操作,程序在等待而已(程序未中断,循环未中断)


你写的答案
第三行x=input('请输入你的分数:')
将赋值操作放在了循环中的第一个语句
跟小甲鱼放在循环结尾本质上都是一样的(为了下次循环的开始)
修改你的代码后,在循环前做一次赋值操作,可以造成和小甲鱼一样的效果
  1. '''06讲动动手'''

  2. x = input('请输入你的分数:')
  3. while 1==1:
  4.     if x=='e':
  5.         break
  6.     else:
  7.         x=int(x)

  8.         if x<60:
  9.             print('D')
  10.         else:
  11.             if x<80:
  12.                 print('C')
  13.             else:
  14.                 if x<90:
  15.                     print('B')
  16.                 else:
  17.                     if x<100:
  18.                         print('A')
  19.                     else:
  20.                         if x==100:
  21.                             print('S')
  22.     x=input('请输入你的分数:')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-28 11:42:42 | 显示全部楼层
逃兵 发表于 2021-5-28 11:01
小甲鱼的答案中
在while外有一次score的赋值操作
score = input("请输入你的分数:")

十分感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-23 09:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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