【发布时间】:2012-04-12 17:57:30
【问题描述】:
提示用户输入文件,在本例中为“histogram.txt”。该程序获取文本文件中的每个分数,并从文件中的所有等级中制作一个直方图,将它们组织起来,以便用户可以看到每个范围有多少。我写了一个很简单的代码:
filename = raw_input('Enter filename of grades: ')
histogram10 = 0
histogram9 = 0
histogram8 = 0
histogram7 = 0
histogram6 = 0
histogram5 = 0
histogram4 = 0
histogram3 = 0
histogram2 = 0
histogram1 = 0
histogram0 = 0
for score in open(filename):
if score >= 100:
histogram10 = histogram10 + 1
elif score >= 90:
histogram9 = histogram9 + 1
elif score >= 80:
histogram8 = histogram8 + 1
elif score >= 70:
histogram7 = histogram7 + 1
elif score >= 60:
histogram6 = histogram6 + 1
elif score >= 50:
histogram5 = histogram5 + 1
elif score >= 40:
histogram4 = histogram4 + 1
elif score >= 30:
histogram3 = histogram3 + 1
elif score >= 20:
histogram2 = histogram2 + 1
elif score >= 10:
histogram1 = histogram1 + 1
elif score >= 0:
histogram0 = histogram0 + 1
print
print 'Grade Distribution'
print '------------------'
print '100 :',('*' * histogram10)
print '90 - 99 :',('*' * histogram9)
print '80 - 89 :',('*' * histogram8)
print '70 - 79 :',('*' * histogram7)
print '60 - 69 :',('*' * histogram6)
print '50 - 59 :',('*' * histogram5)
print '40 - 49 :',('*' * histogram4)
print '30 - 39 :',('*' * histogram3)
print '20 - 29 :',('*' * histogram2)
print '10 - 19 :',('*' * histogram1)
print '00 - 09 :',('*' * histogram0)
但是,每当我运行该程序时,所有 20 个成绩都会记录到 >= 100 像这样:
100 : ********************
90-99 :
80-89 :
等等。 ...我如何才能让程序将星星放在正确的位置?
【问题讨论】:
-
总是第 1 步:确保进入程序的数据是正确的。
-
您正在将字符串与数字进行比较...
-
一个小提示:您可以使用一个列表并计算索引,而不是为直方图设置 11 个不同的变量,例如
histogram[min(100, score) / 10] += 1。min是将所有高于 100 的分数放在同一个插槽中。对于更一般的数据,例如计算文本中的单词数,您可以使用字典。 -
一个班轮只是为了好玩
any(__import__('sys').stdout.write('<= {} \t {}\n'.format(i * 10 + 10, '*' * num)) for i, num in ((k, len(list(g))) for k, g in __import__('itertools').groupby( sorted(int(score.strip()) for score in open(raw_input('Enter filename of grades: '))), key = lambda score: (score - 1) / 10)))。
标签: python