2016-04-29 77 views
4

最近我创建一个程序,它从1到所选数字的二进制数进行计数,一直有一些麻烦。Python:不使用内置函数的二进制计数

这是我的代码的时刻:

num6 = 1 
binStr = '' 
num5 = input('Please enter a number to be counted to:') 
while num5 != num6: 
    binStr = str(num6 % 2) + binStr 
    num6 //= 2 

    num6 = num6 + 1 

print(binStr) 

例如,如果我输入5,它需要去1,10,11,100,101 我似乎无法得到它的窍门。任何帮助将不胜感激,谢谢。

+0

你的代码没有意义。试着解释你的逻辑,你可能会发现你自己这样做的问题...例如,如果num5是0,会发生什么...... – Julien

+0

@mattsap你提到的问题明确要求内置的,这与OP想要的是相反的。然而,确实有些答案确实给出了非内建实现。但我相信OP也希望了解他*代码的问题,而不是仅仅复印一份答案。 – Julien

+0

也不清楚二进制计数是什么意思。请添加预期结果的示例。 – Julien

回答

1

问题是你正在将num6与输入数字无关。你不需要继续计算你分开的次数,所以你可以将num5除以2,并取余数。我把你的binary_to_string放在一个函数里面,并把它叫做每个数字到你的输入值:

num5 = int(input('Please enter a number to be counted to:')) 
for i in range(num5 + 1): 
    binStr = "" 
    decimal_number = i 
    while decimal_number > 0: 
     binStr = str(decimal_number % 2) + binStr 
     decimal_number //= 2 
    print(binStr) 
+0

我想说明我认为你应该使用比num5和binStr更好的变量名称。我会分别推荐decimal_number和binary_string。我认为binStr太简单明了;不过,这只是我的看法。 – mattsap

+0

这比较好,但不包括每个二进制数。例如,如果我输入5,它需要去1,10,11,100,101。 – R7mone

+0

我改变了我的解决方案。 – mattsap