如何将数字列表分组到某些类别

时间:2012-03-05 05:27:55

标签: python

我正在试图弄清楚如何接受一个数字列表并将它们分类为某些类别,例如0-10,10-20,20-30和最高90-100但我已经启动了代码,但是代码不是在所有输入中读取,而是仅读取最后一个并重复它。我很难过,有人帮忙吗?

def eScores(Scores):

    count0 = 0
    count10 = 0
    count20 = 0
    count30 = 0
    count40 = 0
    count50 = 0
    count60 = 0
    count70 = 0
    count80 = 0
    count90 = 0

    if Scores > 90:
        count90 = count90 + 1
    if Scores > 80:
        count80 = count80 + 1
    if Scores > 70:
        count70 = count70 + 1
    if Scores > 60:
        count60 = count60 + 1
    if Scores > 50:
        count50 = count50 + 1
    if Scores > 40:
        count40 = count40 + 1
    if Scores > 30:
        count30 = count30 + 1
    if Scores > 20:
        count20 = count20 + 1
    if Scores > 10:
        count10 = count10 + 1
    if Scores <= 10:
        count0 = count0 + 1

    print count90,'had a score of (90 - 100]'
    print count80,'had a score of (80 - 90]'
    print count70,'had a score of (70 - 80]'
    print count60,'had a score of (60 - 70]'
    print count50,'had a score of (50 - 60]'
    print count40,'had a score of (40 - 50]'
    print count30,'had a score of (30 - 40]'
    print count20,'had a score of (20 - 30]'
    print count10,'had a score of (10 - 20]'
    print count0,'had a score of (0 - 10]'    

    return eScores(Scores)

4 个答案:

答案 0 :(得分:1)

每次调用eScores都会将所有计数器(count10count20)设置为零。所以只有最后的通话才有效。

您应该将计数器声明为全局变量,或者将函数放入类中,并使该类的计数器成员变量。

另一个问题是该函数在return语句中调用自身:

return eScores(Scores)

由于这个函数(据我所知)应该只更新计数器变量,它不需要返回任何东西,更不用说递归调用自身了。您最好删除return语句。

答案 1 :(得分:0)

你犯错误的一件事是,当你经历时,你并没有打破整套if。例如,如果你的数字是93,它将把count90设置为1,然后继续计数80并将其设置为1,依此类推,直到它达到count10。

答案 2 :(得分:0)

您的代码正在重复,因为该函数是无限递归的(它没有停止条件)。以下是相关内容:

def eScores(Scores):
    # ...
    return eScores(Scores)

我认为你想要的更像是:

def eScores(Scores):
    # same as before, but change the last line:
    return

由于您要打印结果,我认为您不想返回score10score20等的值。

此外,该函数不会累积结果,因为每次调用函数时都会创建新的本地计数。

答案 3 :(得分:0)

为什么不直接使用每个数字作为键(处理后)并返回值字典?

def eScores(Scores):
    return_dict = {}
    for score in Scores:
        keyval = int(score/10)*10 # py3k automatically does float division
        if keyval not in return_dict:
            return_dict[keyval] = 1
        else:
            return_dict[keyval] += 1
    return return_dict