2017-10-08 149 views
1
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逻辑语句不能按预期工作

+0

为什么你有'if x == 8'然后是'elif x!= 8'?显然'else'将与'if'相反。添加特定的测试只会招致麻烦。 – tadman

回答

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 

这是更好的编码习惯,并导致更清晰,更可读的代码。