python - IF OR 逻辑语句未按预期工作

标签 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 语句也始终返回异常。还有其他方法可以做到这一点或者有人可以帮助我吗?提前致谢。

最佳答案

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

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

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

关于python - IF OR 逻辑语句未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46626374/

相关文章:

python - 安装 skmultilearn.problem_transform 包时出错

python - 创建一个 Numpy 结构标量而不是数组

python - 使用 write() 时如何追加到文件的新行?

python - 如何在 python 中使 multiprocessing.Array 进程安全

python - 聚合组产生 Pandas 数据框

python - 将队列添加到线程函数后如何解决 TypeError : list indices must be integers, not str

python - 如何抓取每两个兄弟 <hr> 标签之间的内容?

python - 在 Python 代码中运行 "wc -l <filename>"

Python 3 列表理解求和与串联

python-3.x - Keras 神经网络中的维度错误