如何使用Python中的列表和函数计算类的等级

如何使用Python中的列表和函数计算类的等级,python,arrays,function,python-3.x,computer-science,Python,Arrays,Function,Python 3.x,Computer Science,我需要编写一个程序,根据以下输入和过程计算班级的分数: 询问用户课程中的测试、作业、测验和实验室数量 询问用户是否有一个期末考试与上述考试有单独的权重,例如,一个课程有两个考试,每个考试权重为12.5%,一个期末考试权重为15% 对于编号大于0 a的每个类别。提示用户输入100%的加权百分比,所有类别的加权百分比总和应为100%!!!B获取类别的分数。C如果类别为实验室,则将所有分数相加。D否则,平均分数。E计算类别的加权平均数 使用每个类别的加权平均值,计算课程中的分数 询问用户是否要计算另一

我需要编写一个程序,根据以下输入和过程计算班级的分数:

  • 询问用户课程中的测试、作业、测验和实验室数量

  • 询问用户是否有一个期末考试与上述考试有单独的权重,例如,一个课程有两个考试,每个考试权重为12.5%,一个期末考试权重为15%

  • 对于编号大于0 a的每个类别。提示用户输入100%的加权百分比,所有类别的加权百分比总和应为100%!!!B获取类别的分数。C如果类别为实验室,则将所有分数相加。D否则,平均分数。E计算类别的加权平均数

  • 使用每个类别的加权平均值,计算课程中的分数

  • 询问用户是否要计算另一个类的分数

  • 如果用户回答是,则返回步骤1。7.否则,结束节目

  • 我几乎完成了这个程序,拥有了我所有的功能,但我很难让它全部正常运行。我的第一个问题是合并步骤5/6并使while循环与其余代码一起工作。此外,我很难将实验室分数相加并将该值纳入加权平均值

    非常感谢您的帮助

    这是我的密码:

    def main():
           inputList = get_user_input()
           average = get_scores(inputList)
           weightedAvgs = get_weightedavg(average, inputList)
           results = get_class_grade(weightedAvgs)
    
           ans = "yes"
           while(ans == "yes"):
                def get_user_input():
                        inputList = [] # initializes a list
                # Gets how many scores for each category the user would like to enter and adds value to a list
                        tests = int(input("How many tests scores would you like to enter? "))
                        inputList.append(tests)
                        assignments = int(input("How many assignment scores would you like to enter: "))
                        inputList.append(assignments)
                        quizzes = int(input("How many quiz scores would you like to enter? "))
                        inputList.append(quizzes)
                        labs = int(input("How many lab scores would you like to enter? "))
                        inputList.append(labs)
                        final = int(input("How many final scores would you like to enter? "))
                        inputList.append(final)
    
                # Gets the weight of each category if there are any scores to enter and adds the value to a list
                        if tests > 0:
                                testWeight = float(input("Enter the weight of tests: "))
                                inputList.append(testWeight)
                        else:
                                testWeight = 0
                        if assignments > 0:
                                assignmentWeight = float(input("Enter the weight of assignments: "))
                                inputList.append(assignmentWeight)
                        else:
                                assignmentWeight = 0
                        if quizzes > 0:
                                quizWeight = float(input("Enter the weight of quizzes: "))
                                inputList.append(assignmentWeight)
                        else:
                                quizWeight = 0
                        if labs > 0:
                                labWeight = float(input("Enter the weight of labs: "))
                                inputList.append(labWeight)
                        else:
                                labWeight = 0
                        if final > 0:
                                finalWeight = float(input("Enter the weight of the final: "))
                                inputList.append(finalWeight)
                        else:
                                finalWeight = 0
    
                        return(inputList)
    
                def get_scores(inputList):
                # Gets scores for each category & calculates avg for each category
                        average = []
                        testScoreList = []
                        tests2 = inputList[0]
                        for x in range(tests2):
                                testScore = float(input("Enter your test score: "))
                                testScoreList.append(testScore)
                        if tests2 == 0:
                                testAvg = 0
                        else:
                                testAvg = sum(testScoreList) / inputList[0]
                        average.append(testAvg)
    
    
                        assignmentScoreList = []
                        assignments2 = inputList[1]
                        for x in range(assignments2):
                                assignmentScore = float(input("Enter your assignment score: "))
                                assignmentScoreList.append(assignmentScore)
                        if assignments2 == 0:
                                assignmentAvg = 0
                        else:
                                assignmentAvg = sum(assignmentScoreList) / inputList[1]
                        average.append(assignmentAvg)
    
    
                        quizScoreList = []
                        quizzes2 = inputList[2]
                        for x in range(quizzes2):
                                quizScore = float(input("Enter your quiz score: "))
                                quizScoreList.append(quizScore)
                        if quizzes2 == 0:
                                quizAvg = 0
                        else:
                                quizAvg = sum(quizScoreList) / inputList [2]
                        average.append(quizAvg)
    
    
                        labScoreList = []
                        labs2 = inputList[3]
                        for x in range(labs2):
                                labScore = float(input("Enter your lab score: "))
                                labScoreList.append(labScore)
                        if labs2 == 0:
                                labSum = 0
                        else:
                                labSum = sum(labScoreList)
                        average.append(labSum)
    
    
                        finalScoreList = []
                        final2 = inputList[4]
                        for x in range(final2):
                                finalScore = float(input("Enter the score for your final: "))
                                finalScoreList.append(finalScore)
                        if final2 == 0:
                                finalAvg = 0
                        else:
                                finalAvg = sum(finalScoreList) / inputList[4]
                        average.append(finalAvg)
    
    
                def get_weighted_avg(average, inputList):
                        weightedAvgs = []
    
                        weightedTestAvg = average[0] * inputList[5]
                        weightedAvgs.append(weightedTestAvg)
                        print("Your weighted average is " + str(weightedTestAvg))
    
                        weightedAssignmentAvg = average[1] * inputList[6]
                        weightedAvgs.append(weightedAssignmentAvg)
                        print("Your weighted average is " + str(weightedAssignmentAvg))
    
                        weightedQuizAvg = average[2] * inputList[7]
                        weightedAvgs.append(weightedQuizAvg)
                        print("Your weighted average is " + str(weightedAssignmentAvg))
    
                        weightedLabSum = average[3] * inputList[8]
                        weightedAvgs.append(weightedLabSum)
                        print("The sum of your lab scores are " + str(weightedLabAvg))
    
                        weightedFinalAvg = average[4] * inputList[9]
                        weightedAvgs.append(weightedFinalAvg)
                        print("Your weighted average is " + str(weightedFinalAvg))
    
                        return(weightedAvgs)
    
                def get_class_grade(weightedAvgs):
                        grade = weightedAvgs[0] + weightedAvgs[1] + weightedAvgs[2] + weightedAvgs[3] + weightedAvgs[4]
    
                        if grade >= 90:
                finalGrade = "A"
                        elif grade >= 80:
                                finalGrade = "B"
                        elif grade >= 70:
                                finalGrade = "C"
                        elif grade >= 60:
                                finalGrade = "D"
                        else:
                                finalGrade = "F"
    
                        print("Your grade is " + finalGrade)
                        ans = (input("Would you like to calculate a grade for another class? "))
                        while(ans != "yes" and ans != "no"):
                                print("Please type yes or no")
                                ans = (input("Would you like to calculate a grade for another class? "))
        if ans == "no":
                exit()
    main()
    

    我不打算为您检查和重新组织代码,因为这是您真正需要解决的问题。相反,我将提供如何使用
    while循环的示例

    当为真和中断时

    使用
    while True
    可以连续运行下面的代码。使用条件,然后可以使用
    break
    在该点退出循环

    while True:
        # Will request a number and print it back to the user
        # If a valid entry is entered print and exit while loop
        # Otherwise while loop will continue
        user_input = input('Please enter a number: ')
        if user_input.isdigit(): # Checks if the input string is a number
            print('You entered {0}'.format(user_input))
            break # exit loop
        else:
            print('That is not a number')
    
    当递增时

    另一种方法是使用变量并在每次迭代后递增。一旦计数器达到某个数字并伪造条件,则循环将在迭代完成后退出

    counter = 0
    input_list = []
    print('Please enter a valid non-number 5 times')
    while counter < 5: # Exits when condition is false | counter >= 5
        user_input = input('Please enter a non-number: ')
        if not user_input.isdigit(): # Checks if the input string is a number
            input_list.append(user_input) # Add input to list
            counter += 1 # Increments counter by 1
        else:
            print("That's a number")
    
    print(input_list)
    
    旁注检查字符串的使用输入时,有几种方法。这些例子都是有效的,不限于-

    if user_input.lower() == 'q':
    if user_input == 'q' or user_input == 'Q':
    if user_input in 'qQ':
    

    为什么要将函数嵌入while循环中?代码的复杂性让它很难阅读。请考虑重新组织代码,这样主循环只包含少量的行,可以调用其他函数。@ OZ123,我不知道如何合并while循环。我的思考过程是,如果我将while循环包装在所有代码(包括函数)周围,那么只要条件为真,其中的所有内容都将运行。对于你的第二个评论,我很抱歉,但我不知道怎么做。我是编程新手。对于初学者,您需要将函数定义移到
    while
    循环之外。首先定义函数,然后调用它们。请看一看,;因此,尝试教授这些材料并不实际(或合适)。一旦你完成了这一点,看看其他人编写的代码,看看用Python组织事情的常用方法也会很有帮助。
    if user_input.lower() == 'q':
    if user_input == 'q' or user_input == 'Q':
    if user_input in 'qQ':