鱼C论坛

 找回密码
 立即注册
查看: 3390|回复: 13

[已解决]while 循环无故跳出,求助!

[复制链接]
发表于 2022-9-16 02:58:00 | 显示全部楼层 |阅读模式

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

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

x
想让程序可以不断接收输入,直至用户输入小写字母 e跳出,自己写了下面的代码,可是输出的时候输入99都会直接跳出,不知道为什么
while True:
    temp = input("Please guess the number :")
    number = int(temp)
    if number < 60:
        print("D")
    if number >=60 and number < 80:
        print("C")
    if number >= 80 and number < 90:
        print("B")
    if number >= 90 and number <100:
        print("A")
    if number == 100:
        print("S")
    else:
        print("Invalid")
        break

输出结果
================== RESTART: D:/Pythontry/新建文件夹/gametry.py =================
Please guess the number :100
S
Please guess the number :99
A
Invalid

================== RESTART: D:/Pythontry/新建文件夹/gametry.py =================
Please guess the number :90
A
Invalid

================== RESTART: D:/Pythontry/新建文件夹/gametry.py =================
Please guess the number :111
Invalid
最佳答案
2022-9-16 09:13:31
本帖最后由 jackz007 于 2022-9-16 09:41 编辑
  1. while True:
  2.     temp = input("Please guess the number :")
  3.     number = int(temp)
  4. . . . . . .
  5.     if number == 100:
  6.         print("S")
  7.     else:
  8.         print("Invalid")
  9.         break
复制代码

        根本不是"无故退出",这些语句告诉我们,除非 number = 100,否则,都会退出循环,问题出在 if ... else 逻辑使用不合适,你是在根据 number 数值进行分数的分段判断,从头到尾应该属于同一个逻辑,也就是同一个 if,可是,你却使用了多个相互独立的 if,问题就出在了这里

        if ... elif ... elif ... else 了解一下
        一个 if 可以带无数个 elif 和 一个 else,特别适用于需要对数值进行分段判断的场合

        所以,请楼主一定要参考一下下面的代码
  1. f = True
  2. while f:
  3.     temp = input("input your score please : ")
  4.     if temp . lower() == 'e':
  5.         f = False
  6.     elif temp . isdigit():
  7.         number = int(temp)
  8.         if 0 <= number <= 100:
  9.             if number == 100:
  10.                 print('S\n')
  11.             elif 90 <= number < 100:
  12.                 print('A\n')
  13.             elif 80 <= number < 90:
  14.                 print('B\n')
  15.             elif 60 <= number < 80:
  16.                 print('C\n')
  17.             else:
  18.                 print('D\n')
  19.         else:
  20.             print("Invalid score .\n")
  21.     else:
  22.         print('Invalid input .\n')
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\Python>python x.py
  2. input your score please : ABC
  3. Invalid input .

  4. input your score please : 120
  5. Invalid score .

  6. input your score please : 88
  7. B

  8. input your score please : e

  9. D:\[00.Exerciese.2022]\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-9-16 06:17:00 From FishC Mobile | 显示全部楼层
这些代码bug太多,需要重新回炉
单说你最后一个if语句,就是不等于100就直接终止循环
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-16 07:32:12 From FishC Mobile | 显示全部楼层
6,8,10行改成elif
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-16 09:13:31 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2022-9-16 09:41 编辑
  1. while True:
  2.     temp = input("Please guess the number :")
  3.     number = int(temp)
  4. . . . . . .
  5.     if number == 100:
  6.         print("S")
  7.     else:
  8.         print("Invalid")
  9.         break
复制代码

        根本不是"无故退出",这些语句告诉我们,除非 number = 100,否则,都会退出循环,问题出在 if ... else 逻辑使用不合适,你是在根据 number 数值进行分数的分段判断,从头到尾应该属于同一个逻辑,也就是同一个 if,可是,你却使用了多个相互独立的 if,问题就出在了这里

        if ... elif ... elif ... else 了解一下
        一个 if 可以带无数个 elif 和 一个 else,特别适用于需要对数值进行分段判断的场合

        所以,请楼主一定要参考一下下面的代码
  1. f = True
  2. while f:
  3.     temp = input("input your score please : ")
  4.     if temp . lower() == 'e':
  5.         f = False
  6.     elif temp . isdigit():
  7.         number = int(temp)
  8.         if 0 <= number <= 100:
  9.             if number == 100:
  10.                 print('S\n')
  11.             elif 90 <= number < 100:
  12.                 print('A\n')
  13.             elif 80 <= number < 90:
  14.                 print('B\n')
  15.             elif 60 <= number < 80:
  16.                 print('C\n')
  17.             else:
  18.                 print('D\n')
  19.         else:
  20.             print("Invalid score .\n")
  21.     else:
  22.         print('Invalid input .\n')
复制代码

        运行实况:
  1. D:\[00.Exerciese.2022]\Python>python x.py
  2. input your score please : ABC
  3. Invalid input .

  4. input your score please : 120
  5. Invalid score .

  6. input your score please : 88
  7. B

  8. input your score please : e

  9. D:\[00.Exerciese.2022]\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-16 09:35:45 | 显示全部楼层

简单来说,你的 if 和  if 之间是没有关联的,也就是你第一个 if 不管是否成立,只要程序正常执行,第二个 if 也必须是要判断是

所以你循环中的 if-else 结构 实际上就最后一个是相互关联的,而前面的 if 都无关系,只要当你  最后一个 if number  == 100 不成立,就一定会执行 else

只要你将第二个 if  改写成 elif 即可,这样这个分支结构就是一体的

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

使用道具 举报

发表于 2022-9-16 12:04:53 | 显示全部楼层
应该把if改成elif吧,现在最后一个else是最后一个if的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-16 20:19:09 | 显示全部楼层
本帖最后由 hveagle 于 2022-9-17 06:29 编辑

你的代码
  1. while True:
  2.     temp = input("Please guess the number :")
  3.     number = int(temp)
  4.     if number < 60:
  5.         print("D")
  6.     if number >=60 and number < 80:
  7.         print("C")
  8.     if number >= 80 and number < 90:
  9.         print("B")
  10.     if number >= 90 and number <100:
  11.         print("A")
  12.     if number == 100:
  13.         print("S")
  14.     else:
  15.         print("Invalid")
  16.         break
复制代码

我的代码
  1. while True:
  2.     temp = input("Please guess the number:")
  3.     if temp == 'e':
  4.         break
  5.     else:
  6.         print('输入错误!')
  7.         continue
  8.     number = int(temp)
  9.     if number < 60:
  10.         print("D")
  11.         continue
  12.     if number >=60 and number < 80:
  13.         print("C")
  14.         continue
  15.     if number >= 80 and number < 90:
  16.         print("B")
  17.         continue
  18.     if number >= 90 and number <100:
  19.         print("A")
  20.         continue
  21.     if number == 100:
  22.         print("S")
  23.         continue
  24.     else:
  25.         print("Invalid")
  26.         continue
复制代码

代码差别(红色代表要补上的部分绿色代表要删除的部分)
while True:
    temp = input("Please guess the number:")
    if temp == "e":
        break
    else:
        print("Invalid")
        continue

    number = int(temp)
    if number < 60:
        print("D")
        continue
    if number >=60 and number < 80:
        print("C")
        continue
    if number >= 80 and number < 90:
        print("B")
        continue
    if number >= 90 and number <100:
        print("A")
        continue
    if number == 100:
        print("S")
        continue
    else:
        print("Invalid")
        continue
        break
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2022-9-17 15:02:28 | 显示全部楼层
修改后 :
  1. while True:
  2.     temp = input("Please guess the number :")
  3.     number = int(temp)
  4.     if number < 60:
  5.         print("D")
  6.     elif number >= 60 and number < 80:
  7.         print("C")
  8.     elif number >= 80 and number < 90:
  9.         print("B")
  10.     elif number >= 90 and number <100:
  11.         print("A")
  12.     elif number == 100:
  13.         print("S")
  14.     else:
  15.         print("Invalid")
  16.         break

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

使用道具 举报

 楼主| 发表于 2022-9-19 05:42:45 | 显示全部楼层

懂了懂了!谢谢您的帮助if和elif结构我会了,感谢您的帮助
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 05:43:17 | 显示全部楼层
hveagle 发表于 2022-9-16 20:19
你的代码

我的代码

好的好的,continue我也记录一下这个方法也不错
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 05:44:08 | 显示全部楼层
wp231957 发表于 2022-9-16 06:17
这些代码bug太多,需要重新回炉
单说你最后一个if语句,就是不等于100就直接终止循环

懂了懂了,我也发现if全都是并行的,是行不通的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 05:45:24 | 显示全部楼层
Twilight6 发表于 2022-9-16 09:35
简单来说,你的 if 和  if 之间是没有关联的,也就是你第一个 if 不管是否成立,只要程序正常执行,第二 ...

哦哦哦好,我了解了,谢谢您
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-9-19 05:47:26 | 显示全部楼层

对的!我觉得elif结构在这里非常关键,我觉得可以用一波
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-9-19 18:32:13 | 显示全部楼层
guoyihan3 发表于 2022-9-19 05:42
懂了懂了!谢谢您的帮助if和elif结构我会了,感谢您的帮助

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-26 17:51

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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