鱼C论坛

 找回密码
 立即注册
查看: 3024|回复: 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 编辑
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:\[00.Exerciese.2022]\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:\[00.Exerciese.2022]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2022-9-16 07:32:12 From FishC Mobile | 显示全部楼层
6,8,10行改成elif
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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:\[00.Exerciese.2022]\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:\[00.Exerciese.2022]\Python>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

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

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

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

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

使用道具 举报

发表于 2022-9-16 12:04:53 | 显示全部楼层
应该把if改成elif吧,现在最后一个else是最后一个if的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

懂了懂了!谢谢您的帮助if和elif结构我会了,感谢您的帮助
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

我的代码

好的好的,continue我也记录一下这个方法也不错
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

懂了懂了,我也发现if全都是并行的,是行不通的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

哦哦哦好,我了解了,谢谢您
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

对的!我觉得elif结构在这里非常关键,我觉得可以用一波
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-10 17:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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