Elif语句有2个变量

时间:2013-12-03 00:53:57

标签: python

我试图编写一个返回分数平均分的函数,但我的语法显然不对。有什么建议吗?

average = sum(first_score, second_score, third_score, fourth_score, fifth_score)

if average >= 90 or <= 100:
    print('A')
elif average >=80 or <= 90:
    print('B')
elif average >= 70 or <= 79:
    print('C')
elif average >= 60 or <= 69:
    print('D')
else: 
    print('F')

4 个答案:

答案 0 :(得分:5)

首先,您的条件必须是and s,而不是or s

if 100 >= average >= 90:  # same as if 100 >= average and average >= 90
    print('A')
elif 89 >= average >=80:
    print('B')
elif 79 >= average >= 70:
    print('C')
elif 69 >= average >= 60:
    print('D')
else:
    print('F')

答案 1 :(得分:4)

if 90<= average: return 'A'
elif 80 <= average: return 'b'

你不需要检查上限...因为在我们已经建立的线路上它不到90

答案 2 :(得分:3)

首先,语法错误。如果要使用andor等布尔运算对其进行测试,则需要使子表达式完全自包含:

if average >= 90 or average <= 100:
#                   ^^^^^^^

其次,您正在使用错误的布尔运算。考虑一下您可以测试的可能值:

       >=90(a)   <=100(b)    a or b
 89      F          T           T         < 90
 90      T          T           T           90
 95      T          T           T         > 90 and <100
100      T          T           T          100
101      T          F           T         >100

这些or陈述中的每一个都是真的(如果它们被执行 - 当然,它们不会,因为第一个将始终触发)。这里使用的正确布尔操作是and

if average >= 90 and average <= 100:
#                ^^^

第三,您的范围实际上会重叠,例如90范围内的AB范围内的值if average >= 90 and average < 100: # ^ 。你应该使一端是独占的而另一端是包容性的,例如:

elif

哪一端是包容性的,取决于你的需求,我已经把它变得更容易对学生: - )

最后,由于您使用的是if/elif,因此您无需检查范围的两端。事实上,您已经在之前的 95语句中评估了一端,这意味着您认为这是正确的。换句话说,查看下面的代码,值if average >= 90: # 90 to infinity print('A') elif average >= 80: # 80 to 89.999... print('B') elif average >= 70: # 70 to 79.999... print('C') elif average >= 60: # 60 to 69.999... print('D') else: print('F') # -infinity to 59.999... 将永远不会触发第二个条件,尽管它是真的,因为它会已经触发了第一个条件:

sum

作为附录,您可能希望看到的另一件事是,您似乎只是总结得分以获得平均值(并且语法不正确)因为0想要一个可迭代的列表)。如果这些分数是百分比,您可能需要将总和除以5以将其缩放回百分比,以免最终得到500average = (first + second + third + fourth + fifth) / 5 之间的数字,例如简单:

scores = (first, second, third, fourth, fifth)
average = sum (scores) / len (scores)

或更广义的:

{{1}}

如果您的分数是二十分,或者有一些其他数学关系会导致一个简单的总和返回一个百分比,您可以放心地忽略这个附录。

答案 3 :(得分:1)

首先,sum总计一次迭代。所以,你需要给它一个:

# Note the extra parenthesis
average = sum((first_score, second_score, third_score, fourth_score, fifth_score))

其次,你不能那样使用or。相反,你应该像这样链接比较:

if 90 <= average <= 100:

第三,你错过else之后的冒号。

最后,我想说你的平均值公式是错误的。一组数字的平均值是通过数字之和除以数字的数量来计算的。


以下是该脚本的固定版本:

scores = (first_score, second_score, third_score, fourth_score, fifth_score)
average = sum(scores)/len(scores)
if 89 < average < 101:
    print('A')
elif 79 < average < 90:
    print('B')
elif 69 < average < 80:
    print('C')
elif 59 < average < 70:
    print('D')
else:
    print('F')

此外,我稍微调整了数字,以便我可以使用<代替>=。我这样做是因为前者需要较少的语法。