【问题标题】:Getting the average on random grades获得随机成绩的平均值
【发布时间】:2021-06-27 23:14:33
【问题描述】:

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

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

【问题讨论】:

    标签: python random average


    【解决方案1】:

    如果您发现自己在变量名后添加了一个数字,则表明您可能希望使用列表(或者,通常是可迭代的)来存储元素:

    grades = [51, 62, 87, 57]
    

    有几种方法可以生成随机等级列表 numpy.random.rand 是其中一种,但对于初学者来说,更简单的方法可能是从类似列表开始

    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。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2023-03-27
        • 2017-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-08-25
        • 2016-05-27
        相关资源
        最近更新 更多