这段代码有逻辑错误吗?

时间:2018-07-31 20:33:56

标签: python python-2.x

代码很简单,一旦看到它,您就可以知道它的作用。

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时,会发生同样的事情。 这可能是一个愚蠢的错误,但我似乎无法把手伸进去,我需要一个人来看看。

3 个答案:

答案 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&是按位运算符。