测试平均和成绩 - Python

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/33466153/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 13:23:59  来源:igfitidea点击:

Test Average and Grade - Python

python

提问by Aaron

I am trying to create a python program which when you enter 5 test scores it displays the corresponding letter grade and then gets the average of those five grade and displays the letter grade for the average.

我正在尝试创建一个 python 程序,当您输入 5 个测试分数时,它会显示相应的字母等级,然后获取这五个等级的平均值并显示平均值的字母等级。

Here's my program:

这是我的程序:

#Test Average and Grade

#Enter 5 test scores
test1 = int(input('Enter score 1: '))
test2 = int(input('Enter score 2: '))
test3 = int(input('Enter score 3: '))
test4 = int(input('Enter score 4: '))
test5 = int(input('Enter score 5: '))

total =(test1 + test2 + test3 + test4 + test5)

#Calculate average
def calc_average(total):
    return total / 5

#Grading scale
def determine_score(grade):
    if 90 <= grade <= 100:
        return 'A'
    elif 80 <= grade <= 89:
        return 'B'
    elif 70 <= grade <= 79:
        return 'C'
    elif 60 <= grade <= 69:
        return 'D'
    else:
        return 'F'


grade = total
avg = calc_average(total)
abc_grade = determine_score(grade)

print("That's a(n): " + str(abc_grade))
print('Average grade is: ' + str(avg))

The problem I'm having is that I can't get the grade to display after each score that is entered and I am having trouble trying to figure out how to get the letter grade to display along with the average in the last statement. Any help would be greatly appreciated.

我遇到的问题是,我无法在输入每个分数后显示成绩,而且我无法弄清楚如何让字母成绩与最后一条语句中的平均值一起显示。任何帮助将不胜感激。

Changed program to this:

将程序更改为:

 #Test Average and Grade

#Enter 5 test scores
test1 = int(input('Enter score 1: '))
test2 = int(input('Enter score 2: '))
test3 = int(input('Enter score 3: '))
test4 = int(input('Enter score 4: '))
test5 = int(input('Enter score 5: '))

total =(test1 + test2 + test3 + test4 + test5)

    #Calculate average
    def calc_average(total):
        return total / 5

    #Grading scale
    def determine_score(grade):
        if 90 <= grade <= 100:
            return 'A'
        elif 80 <= grade <= 89:
            return 'B'
        elif 70 <= grade <= 79:
            return 'C'
        elif 60 <= grade <= 69:
            return 'D'
        else:
            return 'F'

    grade = total
    avg = calc_average(total)
    abc_grade = determine_score(grade)

    print("Score 1:", determine_score(test1)) 
    print("Score 2:", determine_score(test2)) 
    print("Score 3:", determine_score(test3)) 
    print("Score 4:", determine_score(test4)) 
    print("Score 5:", determine_score(test5)) 
    print("The average grade is: %s which is a(n): %s " % (str(avg), abc_grade))

Results look this this:

结果如下:

Enter score 1: 75 Enter score 2: 80 Enter score 3: 33 Enter score 4: 90 Enter score 5: 52 Score 1: C Score 2: B Score 3: F Score 4: A Score 5: F The average grade is: 66.0 which is a(n): F

输入分数1:75 输入分数2:80 输入分数3:33 输入分数4:90 输入分数5:52 分数1:C 分数2:B 分数3:F 分数4:A 分数5:F 平均成绩为: 66.0 即 a(n): F

Trying to get the results like this: Enter score 1: 75 That's a(n): C Enter score 2: 80 That's a(n): B Enter score 3: 33 That's a(n): C Enter score 4: 90 That's a(n): A Enter score 5: 52 That's a(n): F The average grade is: 66.0 which is a(n): F

试图得到这样的结果:输入分数 1: 75 那是 a(n): C 输入分数 2: 80 那是 a(n): B 输入分数 3: 33 那是 a(n): C 输入分数 4: 90 那是a(n): A Enter score 5: 52 That's a(n): F 平均成绩为:66.0 即 a(n): F

采纳答案by heinst

To have it print the letter grade as a user enters a score you can do something like:

要在用户输入分数时打印字母等级,您可以执行以下操作:

#Calculate average
def calc_average(total):
    return total / 5

#Grading scale
def determine_score(grade):
    if 90 <= grade <= 100:
        return 'A'
    elif 80 <= grade <= 89:
        return 'B'
    elif 70 <= grade <= 79:
        return 'C'
    elif 60 <= grade <= 69:
        return 'D'
    else:
        return 'F'

#Enter 5 test scores
scores = []
for i in range(1, 6):
    score = int(input('Enter score {0}: '.format(i)))
    print 'That\'s a(n): ' + determine_score(score)
    scores.append(score)

total = sum(scores)
avg = calc_average(total)
abc_grade = determine_score(avg)


print('Average grade is: ' + str(avg))
print("That's a(n): " + str(abc_grade))

The letter grade problem was that you were using total which was all the grades added up (hopefully more than 100 if you got at least a 20 on all 5 assignments), so it would always default to the else. You want to use the avgso that it would give you the letter grade corresponding to the average:

字母等级问题是您使用的总分是所有等级的总和(如果您在所有 5 项作业中至少得到 20 分,希望超过 100),因此它总是默认为 else。您想使用 ,avg以便它为您提供与平均值相对应的字母等级:

abc_grade = determine_score(avg)

You can also omit the grade = totalline because you will never use grade after making this change.

您也可以省略该grade = total行,因为在进行此更改后您将永远不会使用等级。

回答by Daniel

As said previously, if you want to get the correct grade letter you need to change your code from:

如前所述,如果您想获得正确的成绩信,您需要更改您的代码:

abc_grade = determine_score(grade)

to:

到:

abc_grade = determine_score(avg)

I'm not 100% sure what you meant in your last question where you asked how to display the grade letter after the average grade but if i understood you correctly you can just do this:

我不是 100% 确定您在上一个问题中的意思是什么,您询问如何在平均成绩后显示成绩信,但如果我理解正确,您可以这样做:

print "The average grade is: %s and the grade letter of the average is: %s " % (str(avg), abc_grade)

回答by Trey Wilson

def main():
    score1 = 0.0
    score2 = 0.0
    score3 = 0.0
    score4 = 0.0
    score5 = 0.0
    avg = 0.0

    score1 = getScore1()
    score2 = getScore2()
    score3 = getScore3()
    score4 = getScore4()
    score5 = getScore5()

    findAvg = calc_average(score1, score2, score3, score4, score5)
    letterGrade = determine_grade(findAvg)

    print('Score\t\t Numeric Grade   Letter Grade')
    print('------------------------------------------------')
    print('Score 1:\t', score1, '\t\t', determine_grade(score1))
    print('Score 2:\t', score2, '\t\t', determine_grade(score2))
    print('Score 3:\t', score3, '\t\t', determine_grade(score3))
    print('Score 4:\t', score4, '\t\t', determine_grade(score4))
    print('Score 5:\t', score5, '\t\t', determine_grade(score5))

    print('Your final average is: ', findAvg, ',', 'This is your letter   grade: ', letterGrade)

def getScore1():
    score1 = float(input('Enter score 1: '))
    return score1
def getScore2():
    score2 = float(input('Enter score 2: '))
    return score2
def getScore3():
    score3 = float(input('Enter score 3: '))
    return score3
def getScore4():
    score4 = float(input('Enter score 4: '))
    return score4
def getScore5():
    score5 = float(input('Enter score 5: '))
    return score5

def calc_average(score1, score2, score3, score4, score5):
    total = score1 + score2 + score3 + score4 + score5
    avg = total / 5
    return avg

def determine_grade(findAvg):
    if findAvg >= 90 and findAvg <= 100:
        grade = 'A'
        return grade
    elif findAvg >= 80 and findAvg <= 89:
        grade = 'B'
        return grade
    elif findAvg >= 70 and findAvg <= 79:
        grade = 'C'
        return grade
    elif findAvg >= 60 and findAvg <= 69:
        grade = 'D'
        return grade
    else:
        grade = 'F'
        return grade
main()