Python Binary除以2方法

时间:2014-11-20 14:25:48

标签: python binary

我正在寻找这个的输出,这是我如何使用除2方法得到二进制代码

number= int(input(22))
22 / 2 = 11 R 0
11 / 2 = 5 R 1
5 / 2 = 2 R 1
2 / 2 = 1 R 0
1 / 2 = 0 R 1
answer = 10110
print(answer)

使用我目前拥有的代码,我获得了输出11110。 剩余部分是我需要放入列表或字符串的内容,我猜测我需要使用While循环或for循环。

这是我的代码:

binar=""
number=0
while number<=0:
    try:
        number=int(input("Enter a number"))
    except:
        print("That is not a number!")
        continue
print(number)
if (number % 2) == 0:
    num=0
    binar = str(num) + binar
else:
    num=1
    binar = str(num) + binar
while int(number) > 1:
    number=int(number)/2
    print(number)
    if (number % 2) == 0:
        num=0
        binar = str(num) + binar
    else:
        num=1
        binar = str(num) + binar
print(binar)

它真的很草率。我确实有乞讨确保输入是实际数字,而不是字符串。数字不能为0,也不能为负。

3 个答案:

答案 0 :(得分:1)

您可以使用递归函数:

def binary(a,l=[]):
 if a>0:    
    l.append(a%2)
    return binary(a/2)
 else:
    return ''.join(map(str,l[::-1]))

print binary(22)

结果:

10110

a>0 a%2期间,我们将a/2附加到列表并最后调用l[::-1]函数,我们将需要一个列表来反转(map(str,l[::-1]))并转换为字符串(''.join()),最后连接({{1}})!

答案 1 :(得分:0)

导入数学并在将数字除以2后使用代码math.ceil。它看起来像这样

if (number % 2) == 0:
    num=0
    binar = str(num) + binar
else:
    num=1
    binar = str(num) + binar
while int(number) > 1:
    number=int(number)/2
    number=math.ceil(int(number))
    print(number)
    if (number % 2) == 0:
        num=0
        binar = str(num) + binar
    else:
        num=1
        binar = str(num) + binar

这将解决问题。要反转打印,请执行print(name[::-1])

答案 2 :(得分:0)

我认为你的解决方案太复杂了。

您表明您想要计算结果和数字除法的余数2,然后保存余数,将结果设置为新数字并再次执行,直到结果为零。

为此目的,python中有一个divmod函数:

result, remainder = divmod(dividend, divisor)

您可以在获得号码后使用它:

remainders = []
while number:
    number, remainder = divmod(number, 2)
    remainders.append(remainder)
print "".join([str(r) for r in remainders[::-1]])