2016-04-29 76 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