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语句也总是返回异常。还有别的办法吗,或者有人能帮我做这个?提前谢谢。
发布于 2017-10-08 00:23:08
是的,你的条件陈述有问题。如果字符串中有任何无效位,则要引发异常,因此需要如下所示:
if int(binaryStrList[i]) not in {0, 1}:
... # raise Exception
然而,为了简化事情,您可以使用regex。您还可以将长度和内容检查组合到一个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
这是更好的编码实践,并导致更清晰,更易读的代码。
https://stackoverflow.com/questions/46626374
复制相似问题