关于006讲课后作业第二问中无限循环的相关问题
本帖最后由 fc5igm 于 2021-5-28 10:49 编辑课后答案为
score = input("请输入你的分数:")
while score != 'e':
score = int(score)
if score < 60:
print("D")
if 60 <= score < 80:
print("C")
if 80 <= score < 90:
print("B")
if 90 <= score < 100:
print("A")
if score == 100:
print("S")
score = input("请输入你的分数:")
末尾再次出现的input语句我可以理解是为了避免无限循环而作的。
'''06讲动动手'''
while 1==1:
x=input('请输入你的分数:')
if x=='e':
break
else:
x=int(x)
if x<60:
print('D')
else:
if x<80:
print('C')
else:
if x<90:
print('B')
else:
if x<100:
print('A')
else:
if x==100:
print('S')
上面是我自行写的解答。我的答案末尾并没有加入input语句,但也并没有出现无限死循环,产生了和标答一样的效果。
请问原因是什么?
我自行写出来的这个代码是在哪里打断了代码自身的死循环呢?
我所指的“死循环”效果如图
因为你的答案有break可以终止循环
类似于课后作业的while score != 'e'
前6将有可能没有教break所以才那样写吧 原答案中末尾再次出现的input语句我可以理解是为了避免无限循环而作的。
上面这句话理解是错误的。
原答案中,while循环的判断语句为while score != 'e':
当score == 'e'时,条件不满足score != 'e'会终止循环
结尾的input只是为下次的循环而准备的
你的答案在最开始判断是
if x=='e':
break
当x == 'e'时,满足if条件
执行break关键词
终止了while的循环 本帖最后由 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,也挺棒,因为灵活、水平高。
逃兵 发表于 2021-5-28 08:12
原答案中末尾再次出现的input语句我可以理解是为了避免无限循环而作的。
上面这句话理解是错误的。
如果将
score = input("请输入你的分数:")
while score != 'e':
score = int(score)
if score < 60:
print("D")
if 60 <= score < 80:
print("C")
if 80 <= score < 90:
print("B")
if 90 <= score < 100:
print("A")
if score == 100:
print("S")
score = input("请输入你的分数:")
中的最后一行的 score = input("请输入你的分数:")删除,就会出现图片所述的这个效果。
我认为正是这行代码避免了对答案无限循环的重复出现。
我重新审视了我 自己做的原代码,貌似没有看到可以避免图片效果的代码。但是实际情况上却是的确做到了避免图片上的情况发生。
所以我的问题就是,我的这个原答案
'''06讲动动手'''
while 1==1:
x=input('请输入你的分数:')
if x=='e':
break
else:
x=int(x)
if x<60:
print('D')
else:
if x<80:
print('C')
else:
if x<90:
print('B')
else:
if x<100:
print('A')
else:
if x==100:
print('S')
中,请问是哪一行的代码发挥了标答尾行中score = input("请输入你的分数:")的作用,从而成功避免了图片上的情况发生? fc5igm 发表于 2021-5-28 10:47
如果将
中的最后一行的删除,就会出现图片所述的这个效果。
小甲鱼的答案中
在while外有一次score的赋值操作
score = input("请输入你的分数:")
之后再进入循环
并且在循环的最后结尾也是
score = input("请输入你的分数:")
这一行代码的作用不是为了终止循环。循环还在继续,只是你还没有完成赋值操作,程序在等待而已(程序未中断,循环未中断)
你写的答案
第三行x=input('请输入你的分数:')
将赋值操作放在了循环中的第一个语句
跟小甲鱼放在循环结尾本质上都是一样的(为了下次循环的开始)
修改你的代码后,在循环前做一次赋值操作,可以造成和小甲鱼一样的效果
'''06讲动动手'''
x = input('请输入你的分数:')
while 1==1:
if x=='e':
break
else:
x=int(x)
if x<60:
print('D')
else:
if x<80:
print('C')
else:
if x<90:
print('B')
else:
if x<100:
print('A')
else:
if x==100:
print('S')
x=input('请输入你的分数:')
逃兵 发表于 2021-5-28 11:01
小甲鱼的答案中
在while外有一次score的赋值操作
score = input("请输入你的分数:")
十分感谢
页:
[1]