You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python条件语句不符合预期如何修复?(PyCharm环境)

修复Python条件语句的逻辑错误

你的问题出在布尔表达式的逻辑写法错误,Python中or会分别判断每个独立的表达式,而非你预期的连续比较逻辑。

错误原因分析

  • 第一段代码的if studentStatus == "UG" or "G" or "DL",实际执行逻辑是:(studentStatus == "UG") or ("G") or ("DL")。非空字符串"G"、"DL"在布尔判断中永远为True,所以无论输入什么内容,这个条件都会成立,else分支永远不会触发。
  • 第二段代码的if studentStatus != "UG" or "G" or "DL",同理,"G"、"DL"始终为True,导致条件永远成立,哪怕输入正确的UG、G、DL,也会触发错误提示。

两种修复方案

方案1:明确每个比较表达式

把每个状态都和studentStatus单独做比较,用or连接:

studentStatus = str(input("Are you an undergrad (UG), grad (G), or distance learner (DL) student?\n"))
if studentStatus == "UG" or studentStatus == "G" or studentStatus == "DL":
    homework = float(input("How many points did you get for your homework?\n"))
    homework = (homework / 800) * 100
    quiz = float(input("How many points did you get for your quizzes?\n"))
    quiz = (quiz / 400) * 100
    midterm = float(input("How many points did you get for your midterm exam?\n"))
    midterm = (midterm / 150) * 100
    final = float(input("How many points did you get for your final exam?\n"))
    final = (final / 200) * 100
    print(f"Homework: {homework:2.1f}%")
    print(f"Quiz: {quiz:2.1f}%")
    print(f"Midterm: {midterm:2.1f}%")
    print(f"Final: {final:2.1f}%")
else:
    print("Error. Student status must be UG, G, or DL.")

方案2:用in运算符(更简洁)

把允许的状态放在一个列表里,用in判断输入是否在合法范围内:

studentStatus = str(input("Are you an undergrad (UG), grad (G), or distance learner (DL) student?\n"))
valid_statuses = ["UG", "G", "DL"]
if studentStatus in valid_statuses:
    homework = float(input("How many points did you get for your homework?\n"))
    homework = (homework / 800) * 100
    quiz = float(input("How many points did you get for your quizzes?\n"))
    quiz = (quiz / 400) * 100
    midterm = float(input("How many points did you get for your midterm exam?\n"))
    midterm = (midterm / 150) * 100
    final = float(input("How many points did you get for your final exam?\n"))
    final = (final / 200) * 100
    print(f"Homework: {homework:2.1f}%")
    print(f"Quiz: {quiz:2.1f}%")
    print(f"Midterm: {midterm:2.1f}%")
    print(f"Final: {final:2.1f}%")
else:
    print("Error. Student status must be UG, G, or DL.")

如果要保留"错误提示优先"的写法,只需把条件改成studentStatus not in valid_statuses:

studentStatus = str(input("Are you an undergrad (UG), grad (G), or distance learner (DL) student?\n"))
valid_statuses = ["UG", "G", "DL"]
if studentStatus not in valid_statuses:
    print("Error. Student status must be UG, G, or DL.")
else:
    homework = float(input("How many points did you get for your homework?\n"))
    homework = (homework / 800) * 100
    quiz = float(input("How many points did you get for your quizzes?\n"))
    quiz = (quiz / 400) * 100
    midterm = float(input("How many points did you get for your midterm exam?\n"))
    midterm = (midterm / 150) * 100
    final = float(input("How many points did you get for your final exam?\n"))
    final = (final / 200) * 100
    print(f"Homework: {homework:2.1f}%")
    print(f"Quiz: {quiz:2.1f}%")
    print(f"Midterm: {midterm:2.1f}%")
    print(f"Final: {final:2.1f}%")

内容的提问来源于stack exchange,提问作者bubz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 03:23:12