【问题标题】:How to count the numbers of A's, B's, C's, D's and F's in average score calculator?如何计算平均分计算器中A、B、C、D、F的数量?
【发布时间】:2019-09-23 02:05:44
【问题描述】:

我正在尝试编写一个 Python 脚本,该脚本根据用户输入的考试次数和考试分数计算平均分数以及 A、B、C、D 和 F 的数量。

我已经为函数中当前的脚本部分尝试了多种方法: “def letter_score(分数):” 但未能成功地为输入的考试成绩分配相应的字母。

    sum_of_scores = 0
    number_of_exams = int(input("What is the size of the class? "))
    print("Now enter the scores below.")
    for i in range(1, number_of_exams + 1):
     scores = int(input("Student %d : " %(i)))
     sum_of_scores += scores

    def letter_score(scores):
      if scores >= 90:
        scores = "A"
      elif scores < 90 and scores >= 80:
        scores = "B"
      elif scores < 80 and scores >= 70:
        scores = "C"
      elif scores < 70 and scores >= 60:
        scores = "D"
      else:
        scores = "F"

    average_score = sum_of_scores/number_of_exams

    print("The average is " + str(average_score))

    print("There are " + str(scores) + " A's.")
    print("There are " + str(scores) + " B's.")
    print("There are " + str(scores) + " C's.")
    print("There are " + str(scores) + " D's.")
    print("There are " + str(scores) + " F's.")

我成功地找到了平均分数,但字母分数给我带来了麻烦。

【问题讨论】:

    标签: python function dictionary


    【解决方案1】:

    考虑使用pythondictionary来存储letter_score的计数

    您可以通过以下方式将字典初始化为全0:

    letter_score_count = { "A": 0, "B": 0, "C": 0, "D": 0, "F": 0}
    

    在函数letter_score中使用return关键字给出返回值

        def letter_score(scores):
            if scores >= 90:
                return "A"
            elif scores < 90 and scores >= 80:
                return "B"
            elif scores < 80 and scores >= 70:
                return "C"
            elif scores < 70 and scores >= 60:
                return "D"
            else:
                return"F"
    

    此时,调用letter_score方法,将结果作为字典的key,在输入分数时增加每个字母分数的计数器

    letter_score_count[letter_score(scores)] += 1
    

    最后就可以打印结果了

    print("There are " + str(letter_score_count["A"]) + " A's.")
    

    您的代码中的编辑版本。希望对您有所帮助

        sum_of_scores = 0
        number_of_exams = int(input("What is the size of the class? "))
        print("Now enter the scores below.")
        letter_score_count = { "A": 0, "B": 0, "C": 0, "D": 0, "F": 0}
        def letter_score(scores):
            if scores >= 90:
                return "A"
            elif scores < 90 and scores >= 80:
                return "B"
            elif scores < 80 and scores >= 70:
                return "C"
            elif scores < 70 and scores >= 60:
                return "D"
            else:
                return"F"
    
        for i in range(1, number_of_exams + 1):
            scores = int(input("Student %d : " % (i)))
            sum_of_scores += scores
            letter_score_count[letter_score(scores)] += 1
    
        average_score = sum_of_scores / number_of_exams
    
        print("The average is " + str(average_score))
    
        print("There are " + str(letter_score_count["A"]) + " A's.")
        print("There are " + str(letter_score_count["B"]) + " B's.")
        print("There are " + str(letter_score_count["C"]) + " C's.")
        print("There are " + str(letter_score_count["D"]) + " D's.")
        print("There are " + str(letter_score_count["F"]) + " F's.")
    

    【讨论】:

    【解决方案2】:

    如果这有帮助,请告诉我。您需要在字母评分函数中包含计数逻辑。

    from collections import defaultdict
    
    def letter_score(scores,counter_store):
          if scores >= 90:
               scores = "A"
               counter_store["A"]+=1
          elif scores < 90 and scores >= 80:
               scores = "B"
               counter_store["B"]+=1
          elif scores < 80 and scores >= 70:
               scores = "C"
               counter_store["C"]+=1
          elif scores < 70 and scores >= 60:
               scores = "D"
               counter_store["D"]+=1
          else:
               scores = "F"
               counter_store["F"]+=1
          return(counter_store)
    sum_of_scores = 0
    counter_store=defaultdict(int)
    number_of_exams = int(input("What is the size of the class? "))
    print("Now enter the scores below.")
    for i in range(1, number_of_exams + 1):
         scores = int(input("Student %d : " %(i)))
         score_count=letter_score(scores,counter_store)
         sum_of_scores += scores
    
    
    average_score = sum_of_scores/number_of_exams
    print("The average is " + str(average_score))
    
    print("There are " + str(counter_store["A"]) + " A's.")
    print("There are " + str(counter_store["B"]) + " B's.")
    print("There are " + str(counter_store["C"]) + " C's.")
    print("There are " + str(counter_store["D"]) + " D's.")
    print("There are " + str(counter_store["F"]) + " F's.")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-12
      • 2015-12-05
      相关资源
      最近更新 更多