代码很简单,一旦看到它,您就可以知道它的作用。
n = int(input())
if(n%2!=0):
print 'Weird'
elif(n%2==0):
if(n>=2 & n<=5):
print 'Not Weird'
elif(n>=6 & n<=20):
print 'Weird'
elif(n>20):
print 'Not Weird'
它工作正常,但仅显示2种情况的错误。当输入为18
时,其显示为'Not Weird'
,而输出应为'Weird'
。当输入为20
时,会发生同样的事情。
这可能是一个愚蠢的错误,但我似乎无法把手伸进去,我需要一个人来看看。
答案 0 :(得分:5)
这种情况不能像您想象的那样起作用:
>>> n = 18
>>> n >= 2 & n <= 5
True
它实际上是在这样做:
>>> n >= (2 & n) <= 5
True
证明:
>>> import ast
>>> ast.dump(ast.parse('n >= 2 & n <= 5'), annotate_fields=False)
"Module([Expr(Compare(Name('n', Load()), [GtE(), LtE()], [BinOp(Num(2), BitAnd(), Name('n', Load())), Num(5)]))])"
>>> ast.dump(ast.parse('n >= (2 & n) <= 5'), annotate_fields=False)
"Module([Expr(Compare(Name('n', Load()), [GtE(), LtE()], [BinOp(Num(2), BitAnd(), Name('n', Load())), Num(5)]))])"
有关运算符优先级的文档参考为here。
相反,请使用:
2 <= n <= 5
答案 1 :(得分:1)
只需稍微修改一下代码即可删除&
。您可以在if/elif
语句
n = int(input())
if(n%2!=0):
print ('Weird')
elif(n%2==0):
if(2<=n<=5):
print ('Not Weird')
elif(6<=n<=20):
print ('Weird')
elif(n>20):
print ('Not Weird')
答案 2 :(得分:0)
将运算符&
更改为and
。 &
是按位运算符。