Python(2進数→10進数変換)

def valid(bits):
    n = len(bits)
    if n==0:
        return False
    elif bits.count("0")+bits.count("1") != n:
        return False
    else:
        return True

def test_exec():
    bits = input("\nPlease input Binary number:")
    if bits.lower() == "exit":
        return False
    elif not valid(bits):
        print("Not available number:",bits)
        return False
    print("Decimal number:",convert(bits))
    return True

def convert(bs):
    n_decimal=0
    for i,x in enumerate(reversed(bs)):
        n_decimal += int(x)*2**i
        print("Debug","i:",i,"x:",x,"result:",n_decimal)     
    return n_decimal    

def test():
    while test_exec():
        pass
    print("end")

test()

入力値が0か1かを判定する場合、下記のような方法が一般的ですが、文字数を取ってきて判断する方法の方がスマートですね。

for x in bits:
        if x != "0" and x != "1":
            return False

また、enumerate(シーケンス)というイテレーターとforループでタプルを利用する方法とか、スマートな書き方があることに目からうろこの状態でした。
便利な”文字列”.upper()”文字列”.lower()のようなメソッドやlen(シーケンス),abs(整数),max( 整数 , 整数 ) ,min( 整数 , 整数 ) のような組み込み関数を使いこなしていこう!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Python

前の記事

Python(関数のスコープ)