获得随机分数的平均值

2024-04-27 04:36:07 发布

您现在位置:Python中文网/ 问答频道 /正文

有人知道如何得到随机分数的平均值吗?她只想生成随机的分数,得到平均值,但我也做过一次,你在你这边输入分数,但我认为这不是她想要的

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")

Tags: andifrandom分数int平均值gradeprint
2条回答

如果您发现自己在变量名后面加了一个数字,这是一个很大的标志,表明您可能希望使用列表(或者,通常是一个iterable)来存储元素:

grades = [51, 62, 87, 57]

有几种方法可以生成随机等级列表^{}是其中之一,但对于初学者来说,更简单的方法可能是从以下列表开始

grades = []

然后创建一个循环以附加等级。Python提供了一个sum函数来汇总列表中的所有值,并提供了一个len函数来计算列表中的元素数。使用这些函数,您可以计算等级

如果你熟悉这些分数,你也可以使用列表理解来生成分数

如果您继续创建成绩列表,您的代码可以进行如下调整:

for idx, grade in enumerate(grades, 1):
    label = f"Grade {idx}"
    if int(grade) >= 90 and int(grade) <= 100:
        print (label, grade, "A")
    elif int(grade) >= 80 and int(grade) <=90:
        print(label, grade, "B")
    elif int(grade) >= 70 and int(grade) <= 80:
        print(label, grade, "C")
    elif int(grade) > 60 and int(grade) <=70:
        print(label, grade,"D")
    elif int(grade) <= 60:
        print(label, grade, "F")

这里enumerate(grades, 1)grades返回一个索引和一个元素,从1开始,因为我们在这里指定了1

正如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

相关问题 更多 >