如果OR逻辑语句不能按预期工作
问题描述:
while True:
binaryStr=input('Enter binary bit pattern to be converted: ')
binaryStrLen=len(binaryStr)
if binaryStrLen == 8:
pass
elif binaryStrLen != 8:
raise Exception('Bit pattern must be 8 values long!')
binaryStrList=list(binaryStr)
for i in range(8):
if int(binaryStrList[i]) != 0 or int(binaryStrList[i]) != 1:
print(binaryStrList[i])
raise Exception('Non base-2 value entered!')
elif int(binaryStrList[i]) == 0 or int(binaryStrList[i]) == 1:
print(binaryStrList[i])
pass
更具体地说,在for循环中,即使将0和1s输入到binaryStr变量中,这些if语句也总是返回异常。有没有其他的方式来做到这一点,或有人可以帮助我吗?提前致谢。如果OR逻辑语句不能按预期工作
答
是的,您的条件语句存在问题。你想,如果有在字符串中的任何无效位时抛出异常,所以你想要的东西,如:
if int(binaryStrList[i]) not in {0, 1}:
... # raise Exception
但是,为了简单起见,你可以使用正则表达式。您还可以将您的长度和内容检查结合到一个单一的if
声明中。
import re
binaryStrList = ...
if len(binaryStrList) != 8 or re.search('[^01]', binaryStrList):
raise Exception('Invalid string found')
作为一个侧面说明,此代码:
if something:
pass
elif somethingElse:
... # do something else
应重新写为:
if somethingElse:
... # do something else
这是更好的编码习惯,并导致更清晰,更可读的代码。
为什么你有'if x == 8'然后是'elif x!= 8'?显然'else'将与'if'相反。添加特定的测试只会招致麻烦。 – tadman