我们可以通过使用以下算法实现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'
现在有效!
答案 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的参数,重命名以避免丢失原始参数值。调试时,我喜欢看原始值 - 因此重命名。我只是做反射;它与你的问题无关。