1

整数 n を入力として取り、 n のバイナリ表現を保持する 1 と 0 の文字列を返す次のアルゴリズムを使用して、Python で正の整数の 10 進数から 2 進数への変換を実装できます。

負でない整数 n を取り、1 と 0 の文字列を返す関数 int_to_bin_string(n) (int_to_bin_string.py 内) を記述します。

数値を文字列に、またはその逆に変換する組み込みの Python 関数を使用することは許可されていません。

    def int_to_bin_string(n):
        if n == 0:
            return "0"
        s = ''
        while n > 0:
            if n % 2 == 0:
                ch = "0"
            else:
                ch = "1"
            s = s + ch
            n = n/2
        return s

それが私が試したことです。int_to_bin_string(255) を試すと、「11111111」ではなく「1」が返されます

それは今動作します!

4

5 に答える 5

1

最後から 2 番目の行には、次のものが必要です。

n = n/2 
于 2013-10-09T00:13:15.817 に答える
0

これはあなたの代わりになるかもしれません...それはほとんど同じですが

def int_to_bin_string(n):
    s = ''
    while n:        
        s = ((n & 1) and "1" or "0") + s
        n >>= 1
    return s or "0"

これが役立つことを願っています;)

于 2013-10-09T00:45:44.457 に答える
0

return s に早期返品があります。while ループの外にある必要があるため、1 文字しか取得できません。また、n = n/2 である必要があります。

さらに、最初の return ステートメントを見てください。文字列ではなく整数を返します。

于 2013-10-09T00:14:32.803 に答える
0

Pythonのキー関数を使用できます

bin( value ) # returns a string like '0b110110'

数字だけが必要な場合は、単にスライスを取得してください... bin( value )[2:]

于 2013-10-09T00:16:18.627 に答える
0

症状からして、これは Python 3 と Python 2 の問題であると確信しています。変更されたコードは、Python 2 で正常に動作します。

簡単な変更で、このコードをバイリンガルにすることができます。2 による除算をシフトに置き換えます。の代わりにn = n/2、 を使用しますn = n>>1。これは、P2 と P3 の両方で機能します。

def int_to_bin_string(num):
    n = int(num) # added to force int type on entry
    if n == 0:
        return "0"
    s = ''
    while n > 0:
        if n % 2 == 0:
            ch = "0"
        else:
            ch = "1"
        s = s + ch
        n = n >> 1 # was n/2
    return s

また、入力時に引数を強制的に int にする小さなフィルターを追加し、元の引数値が失われないように名前を変更しました。デバッグするときは、元の値を確認したいので、名前を変更します。私はそれを反射的にやっているだけです。あなたの質問とは関係ありません。

于 2013-10-09T01:04:14.413 に答える