我有一个分数列表:
scores = [50, 51, 53, 55, 56, 56, 56, 61, 64, 67, 68, 71, 79, 81, 86, 86, 87, 94, 96, 98, 99]
我想将它们分成几个等级:
答:90%+
B:80% - 89%
C:70% - 79%
D:60% - 69%
E:50% - 59%
不完全确定我是怎么做的!
我尝试过这样的事情:
def grade (score):
if score >= 90:
return "A"
if score >= 80:
return "B"
if score >= 70:
return "C"
if score >= 60:
return "D"
if score >= 50:
return "E"
return "F"
我希望它以示例的形式输出到列表中:
[50 - E, 51 - E, 53 - E, 55 - E]
等等获得更高分
答案 0 :(得分:1)
这是一个字典版本:
grades = {'A': [], 'B': [], 'C': [], 'D':[], 'F': []}
grade_baselines = [('A',90), ('B', 80), ('C', 70), ('D', 60), ('F', 0)]
def sort_grades(score):
for score in scores:
for letter, baseline in grade_baselines:
if baseline < score < baseline+10:
grades[letter].append(score)
输出:
Out[41]:
{'C': [71, 79],
'A': [94, 96, 98, 99],
'D': [61, 64, 67, 68],
'B': [81, 86, 86, 87],
'F': []}
编辑:正如Haken在评论中指出的那样,只要grade_baselines
正确排序,您就可以在比较中使用中断。
if baseline < score:
grades[letter].append(score)
break
答案 1 :(得分:0)
In [21]:
scores = [50, 51, 53, 55, 56, 56, 56, 61, 64, 67, 68, 71, 79, 81, 86, 86, 87, 94, 96, 98, 99]
score_categories = {'[' + str(k) + '% - ' + str(k+10) + '%)': [v for v in scores if k <= v < k+10] for k in range(50, 100, 10)}
for k,v in score_categories.items():
print k + ' : ' + str(v)
[80% - 90%) : [81, 86, 86, 87]
[90% - 100%) : [94, 96, 98, 99]
[70% - 80%) : [71, 79]
[60% - 70%) : [61, 64, 67, 68]
[50% - 60%) : [50, 51, 53, 55, 56, 56, 56]
修改强>
def grade(score):
if score >= 90:
return "A"
if score >= 80:
return "B"
if score >= 70:
return "C"
if score >= 60:
return "D"
if score >= 50:
return "E"
return "F"
score_categories2 = [str(v) + ' - ' + grade(v) for v in scores]
print score_categories2
['50 - E', '51 - E', '53 - E', '55 - E', '56 - E', '56 - E', '56 - E', '61 - D', '64 - D', '67 - D', '68 - D', '71 - C', '79 - C', '81 - B', '86 - B', '86 - B', '87 - B', '94 - A', '96 - A', '98 - A', '99 - A']
答案 2 :(得分:0)
如果您知道,您的输入列表始终包含50到99之间的值,那么您可以使用您的代码;我只是建议添加一个小修改。
gradeA = []
gradeB = []
# etc.
for score in scores:
if score >= 90:
gradeA.add(score)
else if score >= 80:
gradeB.add(score)
# etc.
该代码首先为每个年级创建列表。然后它迭代输入列表中的每个项目,并使用else / if语句来确定您获得的等级。基于此,分数被添加到等效列表中。显然你可以把它放到一个函数中。
现在,如果你有不同范围的输入值,你显然需要找出最高值。
highest = 0
for score in scores:
if score > highest:
highest = score
然后你可以使用计算90%,80%等的值