paizonglost 发表于 2025-7-23 15:29:30

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

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("请输入你的成绩以查询等级")

jackz007 发表于 2025-7-23 15:29:31

本帖最后由 jackz007 于 2025-7-24 22:24 编辑

      多分支判断应该使用 if ... elif ... elif ... else ...,一个 if判断可以有多个 elif 和 一个 else。
      参考代码:
while True :                                 # 死循环
    score = input('请输入您的成绩以便查询等级 : ')
    if not score or score . lower() == 'e' :   # 如果直接回车,或者,键入字符 'e'(或者 'E')
      break                                  # 结束循环
    score = int(score)
    if 0 <= score <= 100 :                     # 如果 score 在有效数值内
      if score == 100 :                      # if ,进一步分段进行判断
            grade = 'a'
      elif 90 <= score < 100 :               # 第一个 elif
            grade = 'b'
      elif 80 <= score < 90 :                # 第二个 elif
            grade = 'c'
      elif 60 <= score < 80 :                # 第三个 elif
            grade = 'd'
      else :                                 # else,也就是 0 <= score < 60
            grade = 'e'
      print('您的分数是 %d' % score)
      print('您的等级是 %s\n' % grade)
    else :                                     # score < 0 or score > 100
      print('抱歉,分数无效!\n')

paizonglost 发表于 2025-7-23 15:30:46

写错了是第六课的课后作业{:5_96:}

某一个“天” 发表于 2025-7-23 15:54:52

你的缩进有问题

kebi 发表于 2025-7-23 16:04:32

你再细心检查一下;或者,用AI去帮你检查。

萧随风 发表于 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分单独处理了。

zhang_emo 发表于 2025-7-23 16:29:23

本帖最后由 zhang_emo 于 2025-7-23 16:36 编辑

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

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

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

4,每条判断的逻辑好像也有点问题,输入值在不同循环中不应该<= 输入值<=;;;应该用 <= 输入值 <

黑衣人009号 发表于 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,使代码更简洁易读。

paizonglost 发表于 2025-7-23 18:05:46

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

那我把int放在while里 先判断score!='e'这一步对吗

jjxj1052 发表于 4 天前

学习到了

ljh666777 发表于 3 天前

范围有冲突吧,前面>=90后面又<=90
页: [1]
查看完整版本: 鱼c第五课课后作业最后一题我能这样写吗?