鱼C论坛

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

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

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

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

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

x
本帖最后由 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语句,但也并没有出现无限死循环,产生了和标答一样的效果。
请问原因是什么?
我自行写出来的这个代码是在哪里打断了代码自身的死循环呢?
我所指的“死循环”效果如图
QQ截图20210528104148.png
最佳答案
2021-5-28 11:01:55
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('请输入你的分数:')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

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

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

你的答案在最开始判断是
if x=='e':
        break
当x == 'e'时,满足if条件
执行break关键词
终止了while的循环
想知道小甲鱼最近在做啥?请访问 -> 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,也挺棒,因为灵活、水平高。

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

使用道具 举报

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

QQ截图20210528104148.png

如果将
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("请输入你的分数:")
的作用,从而成功避免了图片上的情况发生?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-28 11:01:55 | 显示全部楼层    本楼为最佳答案   
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('请输入你的分数:')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-15 18:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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