Python 3.x 在Python中将数字转换为二进制
给定一个非负整数n,向_binary/ToBinary写入一个函数,该函数以二进制格式返回该数字 这是我的代码,但有些测试没有通过。 如果您能帮助我修复代码,我将不胜感激:Python 3.x 在Python中将数字转换为二进制,python-3.x,Python 3.x,给定一个非负整数n,向_binary/ToBinary写入一个函数,该函数以二进制格式返回该数字 这是我的代码,但有些测试没有通过。 如果您能帮助我修复代码,我将不胜感激: def to_binary(n): string = "" if n > 2: string = string + str(n % 2) x = n // 2 while x >= 2: i = x
def to_binary(n):
string = ""
if n > 2:
string = string + str(n % 2)
x = n // 2
while x >= 2:
i = x % 2
string = string + str(i)
x = x // 2
string = string + str(1)
l = len(string)
string[l::-1]
return int(string)
else:
if n == 1:
return 1
if n == 2:
return 10
如果您只想解决将数字转换为二进制字符串的问题,可以使用简单的python:
def to_binary(n):
return "{:b}".format(n)
需要注意的几点
更改串联逻辑将反向生成字符串。你最终不必逆转它。
在[10]中:s=
在[11]中:对于范围5中的i:
…:s=s+stri
...:
在[12]中:s
Out[12]:'01234'
对于小于2的数字,不需要不同的逻辑。除非使用递归,否则不必硬编码任何内容。在这种情况下,硬编码只是基本情况
您根本没有反转字符串
这不会在适当的位置反转字符串。python中的字符串是不可变的。你能做的是
s = s[::-1]
在切片语法中不提供限制与提供起始值和结束值0和长度相同。您不必显式地编写s[lens::-1]
你的逻辑几乎是正确的。只要删除所有内容并保持while循环,代码就会工作
当然,有几种方法可以做到这一点,而不必仅仅通过使用python的内置特性编写代码。
只需使用bin即可
def to_binary(n):
return(bin(n)[2:])
to_binary(6)
'110'
您可以尝试实现将base转换为Python的数学方法。每个数字都可以表示为基数的幂和。对于二进制,以2为基数,这将是N*2**N+…+A*2**3+B*2**2+C*2**1+D*2**0。最困难的部分是找到N,但从那里我们可以使用divmod来求解其他变量 def get_HIGHT_powernum,基数=2: n=0 尽管如此: 如果基数**n+1>=num: 打破 n+=1 返回n def solve_的系数num、功率、基数=2: 系数=[] 对于范围功率中的p,-1,-1: coef,num=divmodnum,base**p 系数 回归系数 领先功率=获得最高功率1000 系数=求解系数1000的系数,领先功率
为了获得基本转换,只需使用int.join[stri for i In coefficients]之类的东西。这种方法适用于所有小于10的碱基,因为10后的碱基需要字母,但同样,您可以使用查看系数中的项目来获得字母。我非常确定他不允许使用这些。当然还有垃圾桶。。。。这可能是一项作业。是的,我应该在没有作业的情况下完成bin@tcarreira你已经发现了问题,为什么不根据这个问题发布答案呢?字符串[l::-1]顺便说一句,行字符串[l::-1]不会更改变量字符串内容哦,谢谢。你是对的!这就是问题所在!我不知道我是怎么加上去的!已经修复了为什么要返回int?这不是一个字符串吗?这里只有相关的很好的答案+1@Tomerikoo虽然我看到其他答案的评论,但我还是很想让他自己做作业。。。我认为很明显,OP正试图自己实现这一点……你可能是对的,但它并没有真正明确地说明。@D.Lohrsträter在tcarreira的帖子评论中,OP说他们不能使用bin方法。
s = s[::-1]
def to_bin(x):
if x == 0:
return '0'
b = ''
while x > 0:
b = str(x%2) + b
x //= 2
return b
def to_binary(n):
return(bin(n)[2:])
to_binary(6)
'110'