Python: 十进制转二进制

4

我正在尝试让这个函数工作,它应该把十进制转换为二进制,但它给我返回的数字都不正确。比如,如果我输入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)

这是我即将参加的学校期中考试的练习题,我们还没有学习二进制。 - Element432
1- 输入值不是十进制、二进制、十六进制或其他任何形式:它是一个正整数(您可以使用任何基数的文字传递它,例如 0xa0b10100o1210 等)。输出是一个包含输入整数的二进制 ("01") 表示的字符串。 2- 如果输入为 0,请使用 return '0' 而不是 return 0。 3- 使用 raise ValueError('expected nonnegative integer') 而不是 return 'Not positive',然后对于正整数 n,您可以使用 to_bin = lambda n: to_bin(n//2) + '01'[n%2] if n else '' - jfs
7个回答

5

这可能也有效。

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

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,)

print decimalToBinary(12)

我已将(value%2)替换为(value%2,)以创建元组(,对于Python来说表示创建元组,括号不能完成此操作...),并将return 0替换为return (0,)。但是您也可以将其转换为字符串。为此,请将(value%2)替换为str(value%2,将0替换为str(0)
请注意,您可以使用内置的bin函数获取二进制十进制数:
 print bin(12) # 'ob1100'

祝你在实践中好运!

0

0

关于 bin 呢?

>>> bin(12)
'0b1100'
>>> bin(0)
'0b0'
>>> bin(-1)
'-0b1'

注意:如果您在考试练习中使用bin,则可能应该忽略其对负数的答案,因为您的教授可能希望您了解负数实际上是如何存储的,而不仅仅是在正表示法前加一个减号。 ;) - Two-Bit Alchemist

0
作为一项练习,有两种方式:

使用字符串:

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 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

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

从第二个实现中删除str转换。 - Forge

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

我假设你是为了练习而这样做,并且你知道Python内置函数bin()已经可以为你完成这个任务。


那非常合理。非常感谢! - Element432
愉快 =)。祝你考试好运。 - Aiman Al-Eryani

0
我会采取另一种方法:
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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接