鱼C论坛

 找回密码
 立即注册
查看: 1611|回复: 9

[已解决]关于新版Python第006讲课后while语句的问题

[复制链接]
发表于 2020-6-10 22:21:38 | 显示全部楼层 |阅读模式

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

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

x
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("请输入你的分数:")
参考答案中,如果去掉最后一句,运行时,随便输入一个数,会无限重读print的答案,但是加上最后一句,就会重提问一次,这是为什么呢?
例如,去掉最后一句后,运行时,我输入20,会无限打印"A",加上最后一句,运行时,只打印一遍“请输入你的分数”
最佳答案
2020-11-2 15:56:57
楼主,这是新版课后作业006讲,动动手1题。这是标准答案:
  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("请输入你的分数:")

  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")
复制代码

为什么会不断打印等级字母,因为,这是恒成立,恒为真,
这个代码的判断条件while score != 'e': 是恒成立的,因为我们根本就不会输入'e',所以恒成立,那么就会
一直循环,一直判断,一直执行,也就是一直判断并打印你之前输入的数值的等级。
然后,你把之前删除的语句补回之后,就恢复了。
因为,input 函数的作用就是 等待用户输入,并且将用户输入的结果转化位字符串
所以在这里,你补上之后就会停下运行,它会等你重新输入一个数值,再重新判断,执行
每判断一次,打印一个等级,就会停下,要等你输入一个新的数值才会再次运行,这就是input()  作用。


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

使用道具 举报

发表于 2020-6-10 22:24:00 | 显示全部楼层
在执行input语句时会暂停程序,只有当你输入了值并按下回车才会继续执行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 22:26:17 | 显示全部楼层

input 函数是等待用户输入,并将用户输入的结果转化位字符串,所以会停下运行,待用户输入后才会继续运行下面的代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 22:33:20 | 显示全部楼层
如果去掉最后一句,你输入任何一个数字后,score的值永远不等于'e',while的条件一直为真,进入死循环。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 07:39:13 | 显示全部楼层
本帖最后由 xiaosi4081 于 2020-6-11 07:41 编辑

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

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

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

  7.     if 60 <= score < 80:
  8.         print("C")
  9.         break
  10.     if 80 <= score < 90:
  11.         print("B")
  12.         break
  13.     if 90 <= score < 100:
  14.         print("A")
  15.         break
  16.     if score == 100:
  17.         print("S")
  18.         break
复制代码
input 函数是等待用户输入,并将用户输入的结果转化位字符串,所以会停下运行,待用户输入后才会继续运行下面的代码

而break是用来跳过循环的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 11:41:54 | 显示全部楼层
本帖最后由 1223253411 于 2020-6-11 11:43 编辑

兄弟看看一开始输入20以后是不是score的变量指向的就是20
如果score变量不改变的话,是不是score在循环中始终就是20,那会怎么样呢

while 20 != "e": # 对不对,成不成立,能不能进入循环,那肯定是能的

input是阻塞函数,能将score的变量重新赋值,输入什么赋值什么,还挺好,虽然都是字符串,不过可以转型
用input改变了score变量是不是就可以让循环根据自己输入的数值来进行相应的判断了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 14:35:39 | 显示全部楼层
整个循环中SCORE并没有被重新赋值,SCORE变量始终开始INPUT的分数,所以while score != 'e'永远成立,也就成了死循环

逻辑有点混乱,为什么最后还要来一个 score = input("请输入你的分数:")?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 14:41:18 | 显示全部楼层
而且这只是一个一次性的判断,为什么要用循环?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-11 14:43:52 | 显示全部楼层
哦,明白了,这是一个每次都输入一个成绩,直到输入e才停止的程序,没仔细看,抱歉

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

使用道具 举报

发表于 2020-11-2 15:56:57 | 显示全部楼层    本楼为最佳答案   
楼主,这是新版课后作业006讲,动动手1题。这是标准答案:
  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("请输入你的分数:")

  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")
复制代码

为什么会不断打印等级字母,因为,这是恒成立,恒为真,
这个代码的判断条件while score != 'e': 是恒成立的,因为我们根本就不会输入'e',所以恒成立,那么就会
一直循环,一直判断,一直执行,也就是一直判断并打印你之前输入的数值的等级。
然后,你把之前删除的语句补回之后,就恢复了。
因为,input 函数的作用就是 等待用户输入,并且将用户输入的结果转化位字符串
所以在这里,你补上之后就会停下运行,它会等你重新输入一个数值,再重新判断,执行
每判断一次,打印一个等级,就会停下,要等你输入一个新的数值才会再次运行,这就是input()  作用。


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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 20:03

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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