代码很简单,一旦你看到它就能告诉你它做了什么.
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'
Run Code Online (Sandbox Code Playgroud)
它工作正常,但它只显示2个案例的错误.当输入时18,它表示'Not Weird'输出应该是'Weird'.输入时也会发生同样的事情20.这可能是一个愚蠢的错误或其他什么,但我似乎无法把手指放在它上面,我需要有人看看它.
这种情况不符合你的想法:
>>> n = 18
>>> n >= 2 & n <= 5
True
Run Code Online (Sandbox Code Playgroud)
它实际上是这样做的:
>>> n >= (2 & n) <= 5
True
Run Code Online (Sandbox Code Playgroud)
证明:
>>> 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)]))])"
Run Code Online (Sandbox Code Playgroud)
关于运算符优先级的docs参考在这里.
相反,使用这个:
2 <= n <= 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
100 次 |
| 最近记录: |