我正在寻找这个的输出,这是我如何使用除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,也不能为负。
答案 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]])