2017-10-08 6 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ループ内で、これらのif文は0と1がbinaryStr変数に入力されても常に例外を返します。これを行う他の方法はありますか?誰かがこれを手伝ってくれますか?前もって感謝します。IF OR論理文が意図したとおりに動作しない

+0

なぜ 'if x == 8'と' elif x!= 8'を持っていますか?明らかに 'else'は' if'の反対です。特定のテストを追加するだけで問題を誘発することができます。 – tadman

答えて

2

はい、条件文に問題があります。あなたは正規表現を使用することができ、物事を単純化するために、しかし

if int(binaryStrList[i]) not in {0, 1}: 
    ... # raise Exception 

:あなたはあなたの文字列に無効なビットがある場合は、のような何かをしたいと思いますので、例外を発生します。長さと内容のチェックを1つの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 

それは、より良いコーディング練習だ、と明確につながり、より多くの読み取り可能なコード。

関連する問題