首页 > 解决方案 > 获得随机成绩的平均值

问题描述

有谁知道如何获得随机成绩的平均值?她只想生成随机成绩并获得平均成绩,但我也做过一个,你在最后输入成绩,但我认为这不是她想要的。

import random

grade = random.randint(50,100)
grade2 = random.randint(50,100)
grade3 = random.randint(50,100)
grade4 = random.randint(50,100)
grade5 = random.randint(50,100)

if int(grade) >= 90 and int(grade) <= 100:
  print ("Grade 1:", grade, "A")
elif int(grade) >= 80 and int(grade) <=90:
  print("Grade 1:", grade, "B")
elif int(grade) >= 70 and int(grade) <= 80:
  print("Grade 1:", grade, "C")
elif int(grade) > 60 and int(grade) <=70:
  print("Grade 1:", grade,"D")
elif int(grade) <= 60:
  print("Grade 1:", grade, "F")
if int(grade2) >= 90 and int(grade2) <= 100:
  print ("Grade 2:", grade2, "A")
elif int(grade2) >= 80 and int(grade2) <=90:
  print("Grade 2:", grade2, "B")
elif int(grade2) >= 70 and int(grade2) <= 80:
  print("Grade 2:", grade2, "C")
elif int(grade2) > 60 and int(grade2) <=70:
  print("Grade 2:", grade2,"D")
elif int(grade2) <= 60:
  print("Grade 2:", grade2, "F")
if int(grade3) >= 90 and int(grade3) <= 100:
  print ("Grade 3:", grade3, "A")
elif int(grade3) >= 80 and int(grade3) <=90:
  print("Grade 3:", grade3, "B")
elif int(grade3) >= 70 and int(grade3) <= 80:
  print("Grade 3:", grade3, "C")
elif int(grade3) > 60 and int(grade3) <=70:
  print("Grade 3:", grade3,"D")
elif int(grade3) <= 60:
  print("Grade 3:", grade3, "F")
if int(grade4) >= 90 and int(grade4) <= 100:
  print ("Grade 4:", grade4, "A")
elif int(grade4) >= 80 and int(grade4) <=90:
  print("Grade 4:", grade4, "B")
elif int(grade4) >= 70 and int(grade4) <= 80:
  print("Grade 4:", grade, "C")
elif int(grade4) > 60 and int(grade4) <=70:
  print("Grade 4:", grade4,"D")
elif int(grade4) <= 60:
  print("Grade 4:", grade4, "F")
if int(grade5) >= 90 and int(grade5) <= 100:
  print ("Grade 5:", grade5, "A")
elif int(grade5) >= 80 and int(grade5) <=90:
  print("Grade 5:", grade5, "B")
elif int(grade5) >= 70 and int(grade5) <= 80:
  print("Grade 5:", grade5, "C")
elif int(grade5) > 60 and int(grade5) <=70:
  print("Grade 5:", grade5,"D")
elif int(grade5) <= 60:
  print("Grade 5:", grade5, "F")

标签: pythonrandomaverage

解决方案


正如 Kraigolas 指出的那样,您可以通过将等级而不是 5 个单独的变量放入列表中来消除大量复制+粘贴的代码,并使用enumerate生成“等级 1”、“等级 2”等。

获得平均值的最简单方法是使用statistics.mean,它为您提供传递给它的任何列表的平均值(平均值):

>>> grades = [70, 80, 85]
>>> import statistics
>>> statistics.mean(grades)
78.33333333333333

我还建议将确定字母等级的逻辑放入函数中,如下所示:

def letter_grade(grade: float) -> str:
    assert 0 <= grade <= 100
    for score, letter in [
        (90, "A"),
        (80, "B"),
        (70, "C"),
        (60, "D"),
    ]:
        if grade >= score:
            return letter
    return "F"

现在你可以用很少的代码把它们放在一起:

import random
import statistics

grades = [random.randint(50, 100) for _ in range(5)]

for n, grade in enumerate(grades, 1):
    print(f"Grade {n}: {letter_grade(grade)}")

print(f"Average: {letter_grade(statistics.mean(grades))}")

样本输出:

Grade 1: F
Grade 2: A
Grade 3: A
Grade 4: A
Grade 5: A
Average: B

推荐阅读