数据表示

时间:2013-10-09 00:12:21

标签: python representation

我们可以通过使用以下算法实现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'

现在有效!

5 个答案:

答案 0 :(得分:1)

对于倒数第二行,您需要

n = n/2 

答案 1 :(得分:0)

你的回报过早回归。它需要在你的while循环之外,这就是为什么你只得到一个角色。它也应该是n = n / 2。

另外,看看你的第一个return语句,它返回一个整数而不是一个字符串。

答案 2 :(得分:0)

你可以使用python的关键功能

bin( value ) # returns a string like '0b110110'
如果你只想要数字,那么只需获得一个切片...... bin( value )[2:]

答案 3 :(得分:0)

这可能是你的另一种选择......虽然

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

我希望这确实有帮助;)

答案 4 :(得分: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的参数,重命名以避免丢失原始参数值。调试时,我喜欢看原始值 - 因此重命名。我只是做反射;它与你的问题无关。