Python:十进制到二进制

Python:十进制到二进制,python,Python,我试图让这个函数工作,它应该把十进制转换成二进制,但是它给了我不同的数字。如果我输入12,它会给我2。我不确定我的问题在代码中的位置。任何帮助都会很好,谢谢 def decimalToBinary(value): if value < 0: #Base case if number is a negative return 'Not positive' elif value == 0: #Base case if number is zero

我试图让这个函数工作,它应该把十进制转换成二进制,但是它给了我不同的数字。如果我输入12,它会给我2。我不确定我的问题在代码中的位置。任何帮助都会很好,谢谢

def decimalToBinary(value):
    if value < 0: #Base case if number is a negative
        return 'Not positive'
    elif value == 0: #Base case if number is zero
        return 0
    else:
        return decimalToBinary(value//2) + (value%2)
def十进制(值):
如果值<0:#如果数字为负数,则为基本情况
返回“非正”
elif值==0:#如果数字为零,则为基本情况
返回0
其他:
返回十进制(值//2)+(值%2)

bin

>>> bin(12)
'0b1100'
>>> bin(0)
'0b0'
>>> bin(-1)
'-0b1'
您应该使用内置python函数
bin()


您遇到了错误,因为您添加了数字而不是可数位数,但希望获得位序列…,所以您必须将添加的值转换为元组或字符串(或列表),请参见下面的代码:

def decimalToBinary(value):
    if value < 0: #Base case if number is a negative
        return 'Not positive'
    elif value == 0: #Base case if number is zero
        return (0,)
    else:
         return decimalToBinary(value//2) + (value%2,)

print decimalToBinary(12)

祝你在练习中好运

作为练习,有两种方式:

带字符串:

def decimalToBinary(value):
 if value < 0: #Base case if number is a negative
    return 'Not positive'
 elif value == 0: #Base case if number is zero 
    return ''
 else:
     return decimalToBinary(value//2) + str(value%2)
def十进制(值):
如果值<0:#如果数字为负数,则为基本情况
返回“非正”
elif值==0:#如果数字为零,则为基本情况
返回“”
其他:
返回十进制(值//2)+str(值%2)
使用ints:

def decimalToBinary(value):
 if value < 0: #Base case if number is a negative
    return 'Not positive'
 elif value == 0: #Base case if number is zero 
    return 0
 else:
     return 10*decimalToBinary(value//2) + value%2
def十进制(值):
如果值<0:#如果数字为负数,则为基本情况
返回“非正”
elif值==0:#如果数字为零,则为基本情况
返回0
其他:
返回10*十进制(值//2)+值%2

在这种情况下,您将获得一个数字仅为1或0的十进制数。

您的问题是将结果的数字相加到十进制数中。因此,如果您的结果是
01100
,那么您的函数将输出
0+1+1+0+0
,这等于
2
。如果希望数字叠加,则将结果转换为
字符串
,并连接:

def decimalToBinary(value):
    if value < 0: #Base case if number is a negative
        return 'Not positive'
    elif value == 0: #Base case if number is zero
        return 0
    else:
        return str(decimalToBinary(value//2)) + str((value%2))
print decimalToBinary(12) # prints '01100
def十进制(值):
如果值<0:#如果数字为负数,则为基本情况
返回“非正”
elif值==0:#如果数字为零,则为基本情况
返回0
其他:
返回str(十进制(值//2))+str(值%2))
打印十进制二进制(12)#打印“01100”

我假设您这样做是为了练习,并且您知道python的内置函数
bin()
,它已经为您实现了这一点。

我将采取另一种方法:

def decimalToBinary(number):
    if number<0:
        return 'Not positive'
    i = 0
    result = ''
    while number>>i:
        result = ('1' if number>>i&1 else '0') + result
        i += 1
    return result
def十进制二进制(数字):
如果编号>i:
结果=('1'如果数字>>i&1否则为'0')+结果
i+=1
返回结果

这也可能有效

def DecimalToBinary(number):
        #This function uses recursion to convert & print decimal to binary number
       if number > 1:
           convertToBinary(number//2)
       print(number % 2,end = '')

    # decimal number
    decimal = 34

    convertToBinary(decimal)
    #..........................................
    #it will show output as 110100

这是我即将入学的期中考试的一个练习题,我们还没有学习bin1-输入值不是十进制、二进制、十六进制或其他任何形式:它是一个正整数(你可以用你喜欢的任何基数来传递它,例如,
0xa
0b1010
0o12
10
,等等)。输出是一个字符串,其中包含输入整数的二进制(“01”)表示形式。2-如果输入为
0
,则使用
return'0'
代替
return 0
。3-使用
raisevalueerror('expected non-negative integer')
而不是
return'Not positive'
,然后您可以使用
to_bin=lambda n:to_bin(n//2)+'01'[n%2],如果n else'
表示正
n
,这非常有意义。非常感谢!愉快=)。祝你考试好运。从第二个实现中删除
str
转换。注意,如果你使用
bin
进行考试练习,你可能应该忽略它关于负数的答案,因为你的教授可能希望你了解负数的实际存储方式,不只是在正数前面加一个减号
def DecimalToBinary(number):
        #This function uses recursion to convert & print decimal to binary number
       if number > 1:
           convertToBinary(number//2)
       print(number % 2,end = '')

    # decimal number
    decimal = 34

    convertToBinary(decimal)
    #..........................................
    #it will show output as 110100