【问题标题】: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() 到列表中。