【问题标题】:Python 3- Assign gradePython 3- 分配成绩
【发布时间】:2016-04-10 21:46:27
【问题描述】:

我正在尝试编写一个程序来读取分数列表,然后根据分数分配一个字母等级。定义一个函数以提示用户输入有效分数,直到他们输入标记值 -999。该函数应该创建一个列表并返回该列表。我不断将我的哨兵值 -999 纳入我的列表。如何防止这种情况发生?

def main():
   grade = getScore()
   abcGrade = getGrade(grade)
   print(grade, "is an", abcGrade)


def getScore():
   grade = []
   while grade != -999:
      grade = int(input("Enter grades (-999 ends): "))
   return grade

def getGrade(grade):
   best = 100
   if grade >= best - 10:
      return 'A'
   elif grade >=  best - 20:
      return 'B'
   elif grade >= best - 30:
      return 'C'
   elif grade >= best - 40:
      return 'D'
   else:
      return 'F'

main()

【问题讨论】:

标签: python list python-3.x local sentinel


【解决方案1】:

在这段代码中,您没有将用户输入的值添加到列表grade;;你在重新定义 grade 所以它不再是一个列表而是一个整数:

def getScore():
   grade = []
   while grade != -999:
      grade = int(input("Enter grades (-999 ends): "))
   return grade

这在严格、类型安全的语言中是行不通的,但是,嘿,它是 python :)

要修复它,重命名列表(grades 将是一个直观的名称)并使用append()grade 的值添加到它。然后,返回 grades,而不是 grade 以获取列表。

【讨论】:

  • 投反对票,需要解释一下吗?我在做傻事吗?
【解决方案2】:

这就是你要找的东西:

from statistics import mean

def main():
   grades = getScores()
   grade = mean(grades)
   abcGrade = getGrade(grade)
   print(grade, "is an", abcGrade)


def getScores():
   grades = []
   while True:
      grade = int(input("Enter grades (-999 ends): "))
      if grade == -999: return grades
      grades.append(grade)

def getGrade(grade):
   best = 100
   if grade >= best - 10:
      return 'A'
   elif grade >=  best - 20:
      return 'B'
   elif grade >= best - 30:
      return 'C'
   elif grade >= best - 40:
      return 'D'
   else:
      return 'F'

main()

我做了尽可能少的修改。你必须得到所有的成绩并取平均值。您的代码中的问题是它没有返回任何值或 append() 到列表中。

【讨论】:

    猜你喜欢
    • 2016-08-02
    • 2017-05-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多