首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如果OR逻辑语句不按预期工作

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

Stack Overflow用户
提问于 2017-10-08 00:19:45
回答 1查看 60关注 0票数 1
代码语言:javascript
运行
复制
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语句也总是返回异常。还有别的办法吗,或者有人能帮我做这个?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-08 00:23:08

是的,你的条件陈述有问题。如果字符串中有任何无效位,则要引发异常,因此需要如下所示:

代码语言:javascript
运行
复制
if int(binaryStrList[i]) not in {0, 1}:
    ... # raise Exception

然而,为了简化事情,您可以使用regex。您还可以将长度和内容检查组合到一个if语句中。

代码语言:javascript
运行
复制
import re
binaryStrList = ...
if len(binaryStrList) != 8 or re.search('[^01]', binaryStrList):
    raise Exception('Invalid string found')

作为附带说明,这一代码:

代码语言:javascript
运行
复制
if something:
    pass
elif somethingElse:
    ... # do something else

应改写为:

代码语言:javascript
运行
复制
if somethingElse:
    ... # do something else

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46626374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档