鱼C论坛

 找回密码
 立即注册
查看: 1631|回复: 5

[已解决]这样为什么不行呀?

[复制链接]
发表于 2023-6-1 16:10:46 | 显示全部楼层 |阅读模式

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

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

x


while 1>0:
    x=input('输入你的分数;')
    x=int(x)
    if x == 'e':
        break
    else:
        if 0 <= x < 60:
            print('D')
        else:
            if 60 <= x < 80:
                print('C')
            else:
                if 80 <= x < 90:
                    print('B')
                else:
                    if x == 100:
                        print('S')
                    else:
                        print('A')
最佳答案
2023-6-1 16:13:54
这个代码存在一些问题,具体如下:

1. 如果输入的不是数字,而是字母'e',虽然代码中有判断语句 `if x == 'e': break` ,可以退出循环,但由于 `x` 已经被转成了整型,所以条件始终为 `False`,判断结果会一直是输出'D'。
2. 当输入一个数时,按照代码逻辑,即使符合某个分数段的判断条件,其它分数段的判断也依然会执行,这样会导致在输出正确结果之前打印多个错误信息。

以下是修改后的代码:
while True:
    x = input('输入你的分数:')
    if x == 'e':
        break
    else:
        x = int(x)
        if 0 <= x < 60:
            print('D')
        elif 60 <= x < 80:
            print('C')
        elif 80 <= x < 90:
            print('B')
        elif x == 100:
            print('S')
        else:
            print('A')

主要变动如下:

1. 将转换输入值类型的操作放到第3行,这样当输入非数字时就会抛出异常,从而避免上面的问题。
2. 消除了嵌套的if-else结构,使用elif实现分数段的检测,并将每个段自立地进行判断和输出,从而保证只输出一个结果。

求最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-6-1 16:13:05 | 显示全部楼层
您的代码逻辑基本是正确的,但是存在一处错误,即你试图在已将输入值x转换为整数后,再将其与字符串'e'进行比较,这会引发错误。

如果你希望通过输入'e'来退出循环,你需要在将x转换为整数之前先进行检查。以下是修改后的代码:
while 1>0:
    x = input('输入你的分数;')
    if x == 'e':
        break
    x = int(x)
    if 0 <= x < 60:
        print('D')
    elif 60 <= x < 80:
        print('C')
    elif 80 <= x < 90:
        print('B')
    elif 90 <= x < 100:
        print('A')
    else:
        print('S')

在这段代码中,我们首先检查输入是否为'e',如果是,则退出循环。然后我们将输入转换为整数,并根据这个整数的值来打印相应的分数等级。注意,我在这里使用了elif语句,这使得代码更加清晰,也减少了缩进的级别。

另外,如果你想要处理非法输入(如非数字和非'e'字符),你需要加入额外的错误处理机制,比如使用try/except语句。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2023-6-1 16:13:08 | 显示全部楼层
本帖最后由 歌者文明清理员 于 2023-6-1 16:15 编辑

这段代码的逻辑存在一些问题,具体如下:

  • 判断输入值是否为 'e' 的语句应该放在输入分数之前,否则输入 'e' 后还需要再次输入分数才能退出循环,可以将 if x == 'e': 放到 while 循环内部第一行。
  • 由于 Python 支持else if连写,可以直接使用 elif 判断,可以省去嵌套的 if 语句,这样代码会更加直观和易读。

修复后的代码如下:
while 1>0:
    x = input('输入你的分数:')
    if x == 'e':
        break
    x = int(x)
    if 0 <= x < 60:
        print('D')
    elif 60 <= x < 80:
        print('C')
    elif 80 <= x < 90:
        print('B')
    elif x == 100:
        print('S')
    else:
        print('A')

希望我的回答对您有所帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-1 16:13:54 | 显示全部楼层    本楼为最佳答案   
这个代码存在一些问题,具体如下:

1. 如果输入的不是数字,而是字母'e',虽然代码中有判断语句 `if x == 'e': break` ,可以退出循环,但由于 `x` 已经被转成了整型,所以条件始终为 `False`,判断结果会一直是输出'D'。
2. 当输入一个数时,按照代码逻辑,即使符合某个分数段的判断条件,其它分数段的判断也依然会执行,这样会导致在输出正确结果之前打印多个错误信息。

以下是修改后的代码:
while True:
    x = input('输入你的分数:')
    if x == 'e':
        break
    else:
        x = int(x)
        if 0 <= x < 60:
            print('D')
        elif 60 <= x < 80:
            print('C')
        elif 80 <= x < 90:
            print('B')
        elif x == 100:
            print('S')
        else:
            print('A')

主要变动如下:

1. 将转换输入值类型的操作放到第3行,这样当输入非数字时就会抛出异常,从而避免上面的问题。
2. 消除了嵌套的if-else结构,使用elif实现分数段的检测,并将每个段自立地进行判断和输出,从而保证只输出一个结果。

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

使用道具 举报

 楼主| 发表于 2023-6-1 16:20:18 From FishC Mobile | 显示全部楼层
sfqxx 发表于 2023-6-1 16:13
这个代码存在一些问题,具体如下:

1. 如果输入的不是数字,而是字母'e',虽然代码中有判断语句 `if x = ...

elif和if有什么区别呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-6-1 16:20:46 | 显示全部楼层
亚梨鸭 发表于 2023-6-1 16:20
elif和if有什么区别呀


elif 就是否则如果
if 就是如果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 22:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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