我正在试图弄清楚如何接受一个数字列表并将它们分类为某些类别,例如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)
答案 0 :(得分:1)
每次调用eScores
都会将所有计数器(count10
,count20
)设置为零。所以只有最后的通话才有效。
您应该将计数器声明为全局变量,或者将函数放入类中,并使该类的计数器成员变量。
另一个问题是该函数在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
由于您要打印结果,我认为您不想返回score10
,score20
等的值。
此外,该函数不会累积结果,因为每次调用函数时都会创建新的本地计数。
答案 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