0

Pythonで8ビット加算器を実装しています。 加算器関数の定義は次のとおりです。

def add8(a0,a1,a2,a3,a4,a5,a6,a7,b0,b1,b2,b3,b4,b5,b6,b7,c0):

すべての関数パラメーターはブール値です。int をバイナリに変換する関数を実装しました。

def intTObin8(num):
    bits = [False]*8
    i = 7
    while num >= 1:
        if num % 2 == 1:
            bits[i] = True
        else:
            bits[i] = False
        i = i - 1
        num /= 2
    print bits
    return [bits[x] for x in range(0,8)]

この関数が 8 ビットを返すようにします。そして、この 2 つの関数を次のように使用します。

add8(intTObin8(1),intTObin8(1),0)

問題は、1 つの関数を使用して 8 つのパラメーターを渡す方法です。

4

2 に答える 2

2

これを行う1つの方法:

add8(*(intTObin8(1) + intTObin8(1) + [0]))

リストを連結し、それを引数として に渡しますadd8

これを数回行う場合は、別の関数に入れることができます。

def add8_from_bin8(a,b,c0):
    add8(*(a + b + [c0]))

add8_from_bin8(intTObin8(1), intTObin8(1), 0)
于 2012-10-13T09:30:07.933 に答える
2

いくつかのこと:

add8 では 16 個のパラメーターを使用しません。やりたい場合は、それぞれ8つの要素の2つのリストを取ります。

さらに、intToBin では、False と True の代わりに 0 と 1 を使用する必要があります。また、数値が 8 ビットで表現できることも確認する必要があります (その関数を 1000 で呼び出すとどうなりますか?)。また、PEP8 に従って関数に名前を付ける必要があります: http://www.python.org/dev/peps /pep-0008/

int(num, 2)ps基数2で変換するだけでできることを知っていますか?

そうは言っても、タプルのアンパックを使用してコードを簡素化できる場合があります。

def f(a, b, c):
   bla bla

l = [arg1, arg2, arg3]
f(l[0], l[1], l[2]) #well it's awful
f(*l) #nice
于 2012-10-13T09:31:39.067 に答える