Python - 使用列表将值拆分为特定的成绩值

时间:2015-02-04 06:16:34

标签: python list

我有一个分数列表:

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]
等等获得更高分

3 个答案:

答案 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%等的值