Python 数据表示
我们可以使用以下算法在Python中实现正整数的十进制到二进制转换,该算法将整数n作为输入,并返回包含二进制表示形式n的1和0的字符串 编写一个函数int_to_bin_string(n)(在int_to_bin_string.py中),它接受一个非负整数n并返回由1和0组成的字符串 我们不允许使用任何内置的python函数将数字转换为字符串,反之亦然Python 数据表示,python,representation,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"
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”,而不是“11111”
它现在可以工作了对于倒数第二行,您需要
n = n/2
对于第二行到最后一行,您需要
n = n/2
你有一个过早的回报。它需要在while循环之外,这就是为什么您只能获得一个字符。也应该是n=n/2
另外,看看您的第一个return语句,它返回的是一个整数而不是字符串。您的return s中有一个过早的返回。它需要在while循环之外,这就是为什么您只能获得一个字符。也应该是n=n/2
另外,看看您的第一个return语句,它返回一个整数而不是字符串。您可以使用python的键函数
bin( value ) # returns a string like '0b110110'
如果你只想要数字,只需要一个切片。。。
bin(value)[2://code>您可以使用python的一个关键函数
bin( value ) # returns a string like '0b110110'
如果你只想要数字,只需要一个切片。。。
bin(value)[2://code>这可能是您的另一种选择。。。但几乎是一样的
def int_to_bin_string(n):
s = ''
while n:
s = ((n & 1) and "1" or "0") + s
n >>= 1
return s or "0"
我希望这会有所帮助;) 这可能是你的另一种选择。。。但几乎是一样的
def int_to_bin_string(n):
s = ''
while n:
s = ((n & 1) and "1" or "0") + s
n >>= 1
return s or "0"
我希望这会有所帮助;) 根据症状,我敢打赌这是Python3与Python2的较量。修改后的代码在Python2上运行良好
您可以通过简单的修改使这段代码双语。将除法器替换为2档。使用n=n>>1
代替n=n/2
。这对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,并使用重命名来避免丢失原始参数值。调试时,我希望看到原始值——因此重命名。我只是做反射;这与你的问题无关。我敢打赌,从症状来看,这是Python 3与Python 2的问题。修改后的代码在Python2上运行良好
您可以通过简单的修改使这段代码双语。将除法器替换为2档。使用n=n>>1
代替n=n/2
。这对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,并使用重命名来避免丢失原始参数值。调试时,我希望看到原始值——因此重命名。我只是做反射;这与你的问题无关。还将返回设置在循环之外。还将返回设置在循环之外。我将n/2改为n=n/2,这是一个疏忽。它仍然只给我“1”这个蟒蛇是3吗?如果是这样的话,你可能想要n=n//2
如果你得到的是“chchchchchch”,你可能是s=s+“ch”
而不是s=s+ch
。当我取出单引号时,我发现一个语法错误:无法分配到literal相当确定你没有运行你发布的代码。我将n/2改为n=n/2,这是一个疏忽。它仍然只给我“1”这个蟒蛇是3吗?如果是这样,您可能想要n=n//2
如果您得到的是“chchchchch”,那么您可能想要s=s+“ch”
而不是s=s+ch
。当我取出单引号说:无法分配给literal时,我得到了一个语法错误。我很确定您没有运行发布在此处的代码。我们不允许使用内置python函数。这有点违背了自己编写代码的目的。另外,问题说明您不能使用内置函数来完成此操作。对不起。。。事实上,有些人在不知道他们使用的语言能力的情况下发布了这样的问题。好吧,那么我就参考其他答案。。。n=n/2并返回到loop之外,我修正了这一点,但现在它返回了一堆“chchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch。另外,问题说明您不能使用内置函数来完成此操作。对不起。。。事实上,有些人在不知道他们使用的语言能力的情况下发布了这样的问题。好吧,那么我就参考其他答案。。。n=n/2并返回loopI修复了这一点,但现在它返回一堆“chchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchchch当您没有添加附加报价时:/