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 这些代码bug太多,需要重新回炉
单说你最后一个if语句,就是不等于100就直接终止循环 6,8,10行改成elif 本帖最后由 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>
简单来说,你的 if 和if 之间是没有关联的,也就是你第一个 if 不管是否成立,只要程序正常执行,第二个 if 也必须是要判断是
所以你循环中的 if-else 结构 实际上就最后一个是相互关联的,而前面的 if 都无关系,只要当你最后一个 if number== 100 不成立,就一定会执行 else
只要你将第二个 if改写成 elif 即可,这样这个分支结构就是一体的
应该把if改成elif吧,现在最后一个else是最后一个if的 本帖最后由 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 修改后 :
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
元豪 发表于 2022-9-17 15:02
修改后 :
懂了懂了!谢谢您的帮助if和elif结构我会了,感谢您的帮助 hveagle 发表于 2022-9-16 20:19
你的代码
我的代码
好的好的,continue我也记录一下这个方法也不错 wp231957 发表于 2022-9-16 06:17
这些代码bug太多,需要重新回炉
单说你最后一个if语句,就是不等于100就直接终止循环
懂了懂了,我也发现if全都是并行的,是行不通的 Twilight6 发表于 2022-9-16 09:35
简单来说,你的 if 和if 之间是没有关联的,也就是你第一个 if 不管是否成立,只要程序正常执行,第二 ...
哦哦哦好,我了解了,谢谢您 zhangjinxuan 发表于 2022-9-16 07:32
6,8,10行改成elif
对的!我觉得elif结构在这里非常关键,我觉得可以用一波 guoyihan3 发表于 2022-9-19 05:42
懂了懂了!谢谢您的帮助if和elif结构我会了,感谢您的帮助
望给最佳{:9_221:}{:9_221:}
页:
[1]