鱼C论坛

 找回密码
 立即注册
查看: 237|回复: 9

[Python] 鱼c第五课课后作业最后一题我能这样写吗?

[复制链接]
发表于 2025-7-23 15:29:30 | 显示全部楼层 |阅读模式
5鱼币
grade = input("请输入你的成绩以查询等级")
grade = int(grade)
while grade != "e":
                   if grade == 100:
                      print("你的等级是s")
                      break
                   else:
                        if 90 <= grade <= 100:
                           print("你的等级是a")
                           break
                        else:
                             if 80 <= grade <= 90:
                                print("你的等级是b")
                                break
                             else:
                                  if 60 <= grade <= 80:
                                     print("你的等级是c")
                                     break
                                  else:
                                       print("你的等级是d")
                                       break
grade = input("请输入你的成绩以查询等级")

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-7-23 15:30:46 | 显示全部楼层
写错了是第六课的课后作业
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-7-23 15:54:52 | 显示全部楼层
你的缩进有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-7-23 16:04:32 | 显示全部楼层
你再细心检查一下;或者,用AI去帮你检查。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-7-23 16:06:30 | 显示全部楼层
不能
进入一个while循环,条件是grade不等于字符串"e"。但这里有一个问题:一开始grade被转换成了整数,而循环条件却检查它是否是字符串"e",这会导致类型不一致。整数和字符串永远不相等(除非进行类型转换,但这里没有),所以循环条件在第一次判断时,如果输入的是数字,那么grade != "e"永远为True(因为整数和字符串比较是不相等的),因此循环会一直进行下去。但是,循环内部每个分支都有break,所以实际上每个分支都会跳出循环。
但是,循环之后又有一个input语句,这会导致程序在第一次循环跳出后再次要求输入,但这次输入后并没有进入循环(因为循环已经退出了),所以程序就结束了。这显然不符合循环查询的意图。
另外,代码中还存在以下问题:
逻辑错误:成绩等级划分有重叠(如90<=grade<=100和80<=grade<=90,在90分时同时满足两个条件,但由于代码先判断了90<=grade<=100,所以90分会被判断为a等级,这是正确的。但是注意,第一个条件是if grade==100,所以100分会被单独判断为s等级,而90到99分会被判断为a等级,80到89分是b,60到79分是c,60分以下是d。然而,在边界上,比如80分,它满足80<=grade<=90,所以是b等级,但60分呢?60分在60<=grade<=80的范围内,所以是c等级。而0到59分则是d等级。这里划分存在一个问题:100分被单独划分为s,而90到99是a,但通常100分和90分以上都是A等级(或S等级)?这取决于需求,但代码中100分单独处理了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-7-23 16:29:23 | 显示全部楼层
本帖最后由 zhang_emo 于 2025-7-23 16:36 编辑

1,不能这么写,我一开始也是这么写的;但是后来发现如果你输入的成绩为 e,是字符串格式,第二行的整数转换就会直接报错
所以建议转化整数这一步一定要放在while循环中

2,缩进有问题,最后一个循环不应该跟while一个层级

3,你每个判断中都加了break,,这样就实现不了循环,不管你输入多少,它跑完之后都会给你一个等级,然后就跳出循环了

4,每条判断的逻辑好像也有点问题,输入值在不同循环中不应该<= 输入值  <=;;;应该用 <= 输入值 <
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-7-23 18:04:52 | 显示全部楼层
循环条件无效,无法实现重复查询
代码中while grade != "e"的条件设计不合理:grade被转换为整数类型(int),而"e"是字符串类型(str),两者永远不可能相等,导致循环条件始终为True。
但循环内部每个分支都有break,会强制跳出循环,因此实际只能执行一次查询,无法实现 "重复查询" 的功能。
无法通过输入 "e" 退出程序
程序开头将用户输入直接转换为整数(grade = int(grade)),如果用户输入 "e"(意图退出),会触发ValueError(字符串 "e" 无法转换为整数),导致程序崩溃,而非正常退出。
缺乏异常处理
当用户输入非数字(如字母、符号等)时,int(grade)会直接抛出ValueError,程序会意外终止,没有任何错误提示或容错机制。
循环外的输入语句无效
代码最后一行grade = input("请输入你的成绩以查询等级")在循环之外,执行一次循环后,即使用户输入新的成绩,也不会再次进入判断逻辑,无法实现二次查询。
条件判断冗余
多层嵌套的if-else结构可以简化为elif,使代码更简洁易读。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2025-7-23 18:05:46 | 显示全部楼层
萧随风 发表于 2025-7-23 16:06
不能
进入一个while循环,条件是grade不等于字符串"e"。但这里有一个问题:一开始grade被转换成了整数,而 ...

那我把int放在while里 先判断score!='e'这一步对吗
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 7 天前 | 显示全部楼层
本帖最后由 jackz007 于 2025-7-24 22:24 编辑

        多分支判断应该使用 if ... elif ... elif ... else ...,一个 if  判断可以有多个 elif 和 一个 else。
        参考代码:
  1. while True :                                   # 死循环
  2.     score = input('请输入您的成绩以便查询等级 : ')
  3.     if not score or score . lower() == 'e' :   # 如果直接回车,或者,键入字符 'e'(或者 'E')
  4.         break                                  # 结束循环
  5.     score = int(score)
  6.     if 0 <= score <= 100 :                     # 如果 score 在有效数值内
  7.         if score == 100 :                      # if ,进一步分段进行判断
  8.             grade = 'a'
  9.         elif 90 <= score < 100 :               # 第一个 elif
  10.             grade = 'b'
  11.         elif 80 <= score < 90 :                # 第二个 elif
  12.             grade = 'c'
  13.         elif 60 <= score < 80 :                # 第三个 elif
  14.             grade = 'd'
  15.         else :                                 # else,也就是 0 <= score < 60
  16.             grade = 'e'
  17.         print('您的分数是 %d' % score)
  18.         print('您的等级是 %s\n' % grade)
  19.     else :                                     # score < 0 or score > 100
  20.         print('抱歉,分数无效!\n')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 9 小时前 | 显示全部楼层
学习到了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-31 19:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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