guoyihan3 发表于 2022-9-16 02:58:00

while 循环无故跳出,求助!

想让程序可以不断接收输入,直至用户输入小写字母 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

wp231957 发表于 2022-9-16 06:17:00

这些代码bug太多,需要重新回炉
单说你最后一个if语句,就是不等于100就直接终止循环

zhangjinxuan 发表于 2022-9-16 07:32:12

6,8,10行改成elif

jackz007 发表于 2022-9-16 09:13:31

本帖最后由 jackz007 于 2022-9-16 09:41 编辑

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

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

      所以,请楼主一定要参考一下下面的代码
f = True
while f:
    temp = input("input your score please : ")
    if temp . lower() == 'e':
      f = False
    elif temp . isdigit():
      number = int(temp)
      if 0 <= number <= 100:
            if number == 100:
                print('S\n')
            elif 90 <= number < 100:
                print('A\n')
            elif 80 <= number < 90:
                print('B\n')
            elif 60 <= number < 80:
                print('C\n')
            else:
                print('D\n')
      else:
            print("Invalid score .\n")
    else:
      print('Invalid input .\n')
      运行实况:
D:\\Python>python x.py
input your score please : ABC
Invalid input .

input your score please : 120
Invalid score .

input your score please : 88
B

input your score please : e

D:\\Python>

Twilight6 发表于 2022-9-16 09:35:45


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

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

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

秋鹿姚 发表于 2022-9-16 12:04:53

应该把if改成elif吧,现在最后一个else是最后一个if的

hveagle 发表于 2022-9-16 20:19:09

本帖最后由 hveagle 于 2022-9-17 06:29 编辑

你的代码
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
我的代码
while True:
    temp = input("Please guess the number:")
    if temp == 'e':
      break
    else:
      print('输入错误!')
      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
代码差别(红色代表要补上的部分,绿色代表要删除的部分)
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

元豪 发表于 2022-9-17 15:02:28

修改后 :
while True:
    temp = input("Please guess the number :")
    number = int(temp)
    if number < 60:
      print("D")
    elif number >= 60 and number < 80:
      print("C")
    elif number >= 80 and number < 90:
      print("B")
    elif number >= 90 and number <100:
      print("A")
    elif number == 100:
      print("S")
    else:
      print("Invalid")
      break

guoyihan3 发表于 2022-9-19 05:42:45

元豪 发表于 2022-9-17 15:02
修改后 :

懂了懂了!谢谢您的帮助if和elif结构我会了,感谢您的帮助

guoyihan3 发表于 2022-9-19 05:43:17

hveagle 发表于 2022-9-16 20:19
你的代码

我的代码


好的好的,continue我也记录一下这个方法也不错

guoyihan3 发表于 2022-9-19 05:44:08

wp231957 发表于 2022-9-16 06:17
这些代码bug太多,需要重新回炉
单说你最后一个if语句,就是不等于100就直接终止循环

懂了懂了,我也发现if全都是并行的,是行不通的

guoyihan3 发表于 2022-9-19 05:45:24

Twilight6 发表于 2022-9-16 09:35
简单来说,你的 if 和if 之间是没有关联的,也就是你第一个 if 不管是否成立,只要程序正常执行,第二 ...

哦哦哦好,我了解了,谢谢您

guoyihan3 发表于 2022-9-19 05:47:26

zhangjinxuan 发表于 2022-9-16 07:32
6,8,10行改成elif

对的!我觉得elif结构在这里非常关键,我觉得可以用一波

元豪 发表于 2022-9-19 18:32:13

guoyihan3 发表于 2022-9-19 05:42
懂了懂了!谢谢您的帮助if和elif结构我会了,感谢您的帮助

望给最佳{:9_221:}{:9_221:}
页: [1]
查看完整版本: while 循环无故跳出,求助!