这是我脚本的片段。
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
语句会被执行。
我错过了什么?
感谢您的帮助。
答案 0 :(得分:2)
我认为你可能认为if condition1 and condition2 == False
与if (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