Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在Python中将数字转换为二进制_Python 3.x - Fatal编程技术网

Python 3.x 在Python中将数字转换为二进制

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

给定一个非负整数n,向_binary/ToBinary写入一个函数,该函数以二进制格式返回该数字

这是我的代码,但有些测试没有通过。 如果您能帮助我修复代码,我将不胜感激:

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'