lucaszy 发表于 2021-1-1 19:01:39

Python新版第006讲课后作业最后一题求助

萌新小白,Python新版第006讲:改进我们的小游戏(上)课后习题,最后一题。求大佬解释代码最后一行。为什么循环语句会在这行赋值代码作用下结束。尝试改为 print("请输入你的分数:"),仍然会陷入无限循环。感谢,笔芯。。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("请输入你的分数:")

qq1151985918 发表于 2021-1-1 19:01:40

本帖最后由 qq1151985918 于 2021-1-2 09:51 编辑

楼主,你要理解这一点,while循环是有循环条件的,这个循环条件就是当 分数score只要不等于'e'(选择是e而不是其他字母很大可能是因为e是exit的首字母,不过这不影响),循环体就会执行循环代码,就会只执行while循环体之内的代码,外面的代码就不搭嘎了,所以当代码循环一遍之后,在循环体最后再次让用户输入score既是把循环的控制权教导用户手里,也是让用户选择是否要进行新的循环判断成绩,所以score既是输入的变量,用来查询成绩结果,又是控制循环的开关,随时可以退出。如果我们不想用score退出那么循环体就成了死循环,一直运行下去,直至崩溃,或者我们加入break代码来加以控制

下面回答下楼主问的 怎样在循环内用 break 来控制循环结束

while True:#我们直接把循环定义为死循环,在循环内用 break 来结束循环
   score = input("请输入你的分数(输入 e 退出):")
   if score == "e":
      break#如果输入 e 退出循环
   try:#这里是原来代码没有的,加了个报错,用户是个毛孩子可能乱操作
      score = float(score) #这里我把分数换为浮点型,因为实际中会存在比如90.5这种分数
   except:
      print("请输入正确分数\n")
      continue   # continue 的意思就是结束本次循环立即进入下一次循环
   
   if score < 0 or score > 100:
      print("请输入正确分数\n")
      continue
   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")

print("已退出!")

不会起名字的我 发表于 2021-1-1 19:08:25

换个顺序试一试
score = input("请输入你的分数:")
while score != "e":
    score = input("请输入你的分数:")
    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")

昨非 发表于 2021-1-1 19:08:41

循环不是你想要的吗?
循环条件是score!=e
想要退出输入个e就好了呀

昨非 发表于 2021-1-1 19:09:34

不会起名字的我 发表于 2021-1-1 19:08
换个顺序试一试

不会起名字的我 发表于 2021-1-1 19:14:17

昨非 发表于 2021-1-1 19:09


换个顺序

昨非 发表于 2021-1-1 19:17:16

不会起名字的我 发表于 2021-1-1 19:14
换个顺序

if分支语句的顺序有区别吗

不会起名字的我 发表于 2021-1-1 19:18:30

昨非 发表于 2021-1-1 19:17
if分支语句的顺序有区别吗

把input放在最前面试一试

昨非 发表于 2021-1-1 19:23:36

不会起名字的我 发表于 2021-1-1 19:18
把input放在最前面试一试

为什么要放在前面
那岂不是说要连输入两次?
这也不符合常规啊
再说了,楼主的问题是为什么最后一行代码回控制结束
你这显然答非所问啊

不会起名字的我 发表于 2021-1-1 19:30:22

昨非 发表于 2021-1-1 19:23
为什么要放在前面
那岂不是说要连输入两次?
这也不符合常规啊


我明白了

高举柯哀大旗 发表于 2021-1-1 20:47:06

while循环语句是当条件满足时进入循环,因为你一直没有输入“e”,所以会一直循环下去,最后一行的意思是判断完成绩等级后要输入下一个成绩继续去判断,而当程序运行到这一行之后,如果你输入了“e”,跳回while判断是否进入循环的时候就会发现此时不满足score不等于e这个条件了,循环就终止了。
如果你改为了print(“请输入你的分数:”),结果就是score的值一直不等于e,while的条件判断会一直满足,就会陷入无限循环了。
顺带一提,while条件判断语句你可以理解为“当”型循环语句,意思是    ”当条件满足进入循环“

Ⅲ只小猪 发表于 2021-1-1 21:11:41

卧槽,还好我看的不是新版{:5_97:}

lucaszy 发表于 2021-1-1 21:50:21

不会起名字的我 发表于 2021-1-1 19:08
换个顺序试一试

换顺序就实现不了功能了

lucaszy 发表于 2021-1-1 22:02:35

qq1151985918 发表于 2021-1-1 19:01
楼主,你要理解这一点,while循环是有循环条件的,这个循环条件就是当 分数score只要不等于'e'(选择是e而不 ...

感谢大佬,现在很清楚了。。一条语句实现两个功能,这个很精妙阿,逻辑设计无敌阿。醍醐灌顶。{:7_146:}

敢问大佬,如果加入break来结束循环,需要怎么操作呢?之前试了很多次,加入break,结果都是循环立马结束,只能循环一次,实现不了多次判断等级的功能。

比如下面这种,需要怎么改动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("请输入你的分数:")
    break

lucaszy 发表于 2021-1-1 22:06:29

Ⅲ只小猪 发表于 2021-1-1 21:11
卧槽,还好我看的不是新版

嘿嘿新版题目稍难???不太清楚,不过偶尔一两个确实值得好好琢磨,多练练没坏处{:5_109:}

qq1151985918 发表于 2021-1-2 08:39:38

本帖最后由 qq1151985918 于 2021-1-2 09:50 编辑


while True:#我们直接把循环定义为死循环,在循环内用 break 来结束循环
   score = input("请输入你的分数(输入 e 退出):")
   if score == "e":
      break#如果输入 e 退出循环
   try:#这里是原来代码没有的,加了个报错,用户是个毛孩子可能乱操作
      score = float(score) #这里我把分数换为浮点型,因为实际中会存在比如90.5这种分数,整型也并不影响
   except:
      print("请输入正确分数\n")
      continue   # continue 的意思就是结束本次循环立即进入下一次循环
   
   if score < 0 or score > 100:
      print("请输入正确分数\n")
      continue
   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")

print("已退出!")

lucaszy 发表于 2021-1-2 16:02:18

qq1151985918 发表于 2021-1-2 08:39


哇谢谢!!!好好研究下!{:10_288:}
页: [1]
查看完整版本: Python新版第006讲课后作业最后一题求助