所以我希望将这些数字分组,如下所示,这是不正确的,并希望知道这样做的正确方法。
在“if”代码之后,它分配与分数共同的评级,然后将1添加到计数器中,该计数器计算具有该评级的组的数量。
#determining the meal rating and counting number of applied ratings and priniting
def mealrating(score):
for x in range(0,len(score)):
if 1 < and score[x] >3:
review[x] = poor
p = p + 1
if 4 < and score[x] >6:
review[x] = good
g = g + 1
if 7 < and score[x] >10:
review[x] = excellent
e = e + 1
print('\n')
print('%10s' % ('Poor:', p ))
print('%10s' % ('Good', g ))
print('%10s' % ('Excellent', e ))
答案 0 :(得分:3)
该行
if 1 < and score[x] >3:
只是不起作用。 and
连接两个表达式,因此类似于
if (1 <) and (score[x] > 3):
1 <
只是毫无意义。
快速修复
if 1 < score[x] and score[x] > 3:
但这看起来并不意味着 - 毕竟,它会检查得分[x]是否大于1且大于3,这是多余的。你可能意味着
if 1 < score[x] and score[x] < 3:
哪个分数[x]检查在1到3之间,独占。然后有一个最后的技巧,Python允许你在一个单一的检查中写出:
if 1 < score[x] < 3:
虽然如果你要比较这样的几个范围,你可能想要将<
中的任何一个更改为<=
,否则如果score[x]
正好是你的所有范围都会失败其中一个界限。
答案 1 :(得分:1)
您可以使用bisect
为您处理此问题。可以根据您的情况轻松修改文档中的示例:
from bisect import bisect
from collections import Counter
def grade(score, breakpoints=[3,6], grades='PGE'):
i = bisect(breakpoints, score)
return grades[i]
for k,v in Counter(grade(i) for i in [1,2,3,4,514,35,65,80]).iteritems():
print('Grade: {} # of Awards: {}'.format(k,v))
以下是使用示例运行时的外观:
>>> for k,v in Counter(grade(i) for i in [1,2,3,456,342,90]).iteritems():
... print('Grade: {} # of Awards: {}'.format(k,v))
...
Grade: P # of Awards: 2
Grade: E # of Awards: 3
Grade: G # of Awards: 1
答案 2 :(得分:0)
可能你想要这样的东西:
if 1 < score[x] and score[x] <3:
review[x] = poor
p = p + 1
在'和'的两侧应该有表达式,以便在结果之后进行评估。 所以它分别评估(1&lt; score [x])和(score [x] <3)和'和'两者的结果。