如果OR逻辑语句不按预期工作

时间:2017-10-08 00:19:46

标签: python python-3.x

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和1输入到binaryStr变量中,这些if语句也总是返回异常。有没有其他方法这样做或有人可以帮我这个?提前谢谢。

1 个答案:

答案 0 :(得分:2)

是的,您的条件语句存在问题。如果字符串中存在任何无效位,则需要引发异常,因此您需要以下内容:

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

这是更好的编码实践,并导致更清晰,更易读的代码。