1

我们可以使用以下算法在 Python 中实现正整数的十进制到二进制转换,该算法将整数 n 作为输入并返回包含 n 的二进制表示的 1 和 0 的字符串。

编写一个函数 int_to_bin_string(n)(在 int_to_bin_string.py 中),它接受一个非负整数 n 并返回一个由 1 和 0 组成的字符串。

我们不允许使用任何内置的 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) 我得到 '1',而不是 '11111111'

现在可以了!

4

5 回答 5

1

对于倒数第二行,您需要

n = n/2 
于 2013-10-09T00:13:15.817 回答
0

您在 return s 中有过早的回报。它需要在你的 while 循环之外,这就是为什么你只得到一个字符的原因。它也应该是 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

这可能是您的替代方案...尽管几乎相同

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

我敢打赌,从症状来看,这是 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 回答