【问题标题】:IF OR logic statement not working as intendedIF OR 逻辑语句未按预期工作
【发布时间】:2017-10-08 00:19:45
【问题描述】:
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 语句也总是返回异常。有没有其他方法可以做到这一点,或者有人可以帮助我吗?提前致谢。

【问题讨论】:

  • 为什么你有一个if x == 8,然后是一个elif x != 8?显然else 将与if 相反。在那里添加特定的测试只会招来麻烦。

标签: python python-3.x


【解决方案1】:

是的,您的条件语句存在问题。如果您的字符串中有任何无效位,您想引发异常,因此您需要类似:

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

这是一种更好的编码实践,可以生成更清晰、更易读的代码。

【讨论】:

    猜你喜欢
    • 2021-08-19
    • 2020-03-11
    • 1970-01-01
    • 2020-11-28
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多