使用<部署号码和>值

时间:2014-03-10 10:39:56

标签: python

所以我希望将这些数字分组,如下所示,这是不正确的,并希望知道这样做的正确方法。

在“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 ))

3 个答案:

答案 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)和'和'两者的结果。