1

最大ビット数 (n) と、それらのビット数が表現できる最大数を出力しようとしています。問題はそこにあるように感じますx = x%2

入力:

sortbit(3)

出力:

000
111
000
111
000
111
000
111

期待される出力」

000
001
010
011
100
101
110
111

私のコード:

def sortbit(n):
    max_num = 2**n

    for x in range(0,max_num):
        stringy = []
        a = 0
        while a < n:
            a += 1
            x = x % 2
            if x == 0:
                stringy.insert(a,'0')
            else:
                stringy.insert(a,'1')
        t = ''.join(stringy)
        print t
4

3 に答える 3

2

任意の数値を1または0で変換していますx = x % 2。印刷するだけでも構いませんstr(x % 2) * n

代わりに整数除算を使用し、偶数または奇数を個別にテストする必要があります。

さらに良いことに、係数テストの出力を文字列として次のように追加することもできますstringy

stringy.insert(0, str(x % 2))
x = x // 2

コードを少し簡略化したデモ:

>>> def sortbit(n):
...     max_num = 2**n
...     for x in range(max_num):
...         stringy = []
...         for a in range(n):
...             stringy.append(str(x % 2))
...             x //= 2
...         print ''.join(reversed(stringy))
... 
>>> sortbit(3)
000
001
010
011
100
101
110
111

値をビットシフトすることもできます。>>オペレータは、指定されたステップ数だけビットを右に移動します。x >> 1ビットをx1 ステップでシフトし、基本的に 2 で除算します。

bin()関数( で始まるバイナリ文字列として値を返す0b) とformat()関数を、出力形式を使用して値をバイナリ文字列として書式設定できるstr.format()メソッドと一緒に調べることもできます。b値をループで出力するのは、次のように簡単です。

def sortbit(n):
    for i in range(2**n):
        print '{:0{}b}'.format(i, n)

最後になりましたが、数字の 0 と 1 の積を単に生成しているだけですn。次のように表現することもできitertools.product()ます。

>>> from itertools import product
>>> for bits in product('01', repeat=3):
...     print ''.join(bits)
... 
000
001
010
011
100
101
110
111

しかし、それは不正行為と見なされる可能性があります。:-)

于 2013-10-08T06:51:33.557 に答える
1

に代入x % 2するのではなく、で使用する必要がありますifx

if x % 2 == 0:
  ...

また、反復ごとに次のビットに移動する必要があります。そうしないと、同じビットを何度も追加することになります。

x = x >> 1
于 2013-10-08T06:56:03.367 に答える