此代码中的逻辑错误?
Logical mistake in this code?
代码简单,一看便知。
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
时,也会发生同样的事情。
这可能是一个愚蠢的错误或其他什么,但我似乎无法确定它,我需要有人看一下。
此条件与您认为的不同:
>>> 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
将运算符 &
更改为 and
。 &
是位运算符。
只是稍微修改了您的代码以摆脱 &
。您可以在 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')
代码简单,一看便知。
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
时,也会发生同样的事情。
这可能是一个愚蠢的错误或其他什么,但我似乎无法确定它,我需要有人看一下。
此条件与您认为的不同:
>>> 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
将运算符 &
更改为 and
。 &
是位运算符。
只是稍微修改了您的代码以摆脱 &
。您可以在 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')