如果statement为True但是ELSE被执行

时间:2017-11-16 13:58:42

标签: python

这是我脚本的片段。

while True:

    ## Rules: userInput == [isalpha()=True, isdigit()=True, True, isdigit()=True]

    userInput = raw_input('# ').replace(' ', '').split(',')
    print userInput
    print 'List Index 0', userInput[0].isalpha()
    print 'List Index 1', userInput[1].isdigit()
    print 'List Index 3', userInput[3].isdigit()
    print 'List is', userInput[0].isalpha() and userInput[1].isdigit() and userInput[3].isdigit()

    if userInput[0].isalpha() and userInput[1].isdigit() and userInput[3].isdigit() == False:
        print 'Error'
        continue
    else:
        print 'Success'
        break

如果我使用输入1,1,1,1

运行它,这就是我得到的输出
# 1,1,1,1
['1', '1', '1', '1']
List Index 0 False
List Index 1 True
List Index 3 True
List is False
Success

据我所知,if语句是True,应该执行并返回到循环的开头,直到满足规则。但是,else语句会被执行。

我错过了什么?

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

我认为你可能认为if condition1 and condition2 == Falseif (condition1 and condition2) == False是同一回事,而它与if condition1 and (condition2 == False)实际上是一样的。

在这种情况下你应该做

if (userInput[0].isalpha() and userInput[1].isdigit() and userInput[3].isdigit()) == False:

if not (userInput[0].isalpha() and userInput[1].isdigit() and userInput[3].isdigit()):

if userInput[0].isalpha() and userInput[1].isdigit() and userInput[3].isdigit():
    print 'Success'
    break
else:
    print 'Error'
    continue

答案 1 :(得分:1)

你的布尔逻辑错了,这个:

userInput[0].isalpha() and userInput[1].isdigit() and userInput[3].isdigit() == False

归结为:

False and True and True == False

那是

False and True and False

False,而不是True

答案 2 :(得分:0)

您可能应该将while True的陈述更改为类似while 1:pass的内容。更多信息见here