首页 > 解决方案 > 使用 main 函数计算成绩的 Python 程序

问题描述

我正在尝试编写一个程序,该程序根据 5 种不同作业类型(考试 1、考试 2、考试 3、家庭作业和期末考试)的给定成绩权重计算学生的成绩。我在程序的第一部分遇到了麻烦,我必须定义一个函数来查询用户的成绩并验证它是否正确。

当我尝试运行代码时,我不断收到一个名称错误,提示“assignment_name 未定义”。我还尝试创建一个 for 循环或多个 while 语句。 在此处输入图像描述

标签: python

解决方案


请注意,将代码发布在代码块中以及堆栈跟踪(如果可用)中非常有帮助。

做生意!

根据您提供的图片,我们正在处理:

def get_grade(assignment_name):
    assignment_name = "Exam 1", "Exam 2", "Exam 3", "Homework", "Final"
    assignment = int(input("What is your grade for", assignment_name))
    while assignment < 0 or assignment > 100:
        print("Grade must be number between 0 and 100")

有几件事让我眼前一亮:

  1. assignment_name是函数的参数,但随后会立即被同名的局部变量覆盖。
  2. assignment = int(input("What is your grade for", assignment_name))有一些事情正在发生。
    • 变量名“assignment”在这里具有误导性。我认为像“grade”或“grade_input”这样的东西会更具可读性,因为我们试图从用户那里获取作业成绩,而不是实际作业。
    • input() 函数只接受一个参数。在这里查看更多
  3. 您的 while 语句表达式很好,但它正在执行的逻辑将陷入无限循环,因为您没有退出循环的基本情况。

另一个镜头

要清理函数,我会写如下内容:

def get_assignment_grade_input(assignment_name):
    while True:
        grade_input = int(input(f"What is your grade for {assignment_name}?"))
        if 0 <= grade_input <= 100:
            return grade_input
        else:
            print("Invalid grade. Grade must be between 0 and 100.")
            continue

此函数将作业名称作为输入,并提示用户输入与给定作业名称关联的成绩。如果成绩不符合可接受的标准,我们将提示用户输入可接受的成绩。注意:如果它始终不可接受,那么无限提示用户新成绩可能不是最好的主意,但这应该可以让大家明白这一点!

最后,如果我们得到一个可接受的分数,我们的函数将通过将分数返回给调用者来退出循环。


推荐阅读