2017-05-29 90 views
2

我有一個非常具體的問題,關於如何通過Python將整數轉換爲二進制,而是隻使用mod(%)和除(/)函數。在Python中將整數轉換爲二進制

到目前爲止,我已經成功地創建了實際的函數並循環了自身,但函數似乎永遠循環並增加了一個0和1的數字,儘管成功地進行了轉換。

例如,輸入4,輸出[0,0,1,0,1]。正如你所看到的,它已經成功獲得[0,0,1],它是二進制的4,但是在末尾增加了一個0和一個1。

我認爲這是與我參考和傳遞參數的方式有關,但很樂意接受一些幫助。

num = int(input("Enter the Number")) 
def func(num) 
    if num == 1: 
     alist.append(1) 
     return num 

    while num != 1: 
     modnum = int(num%2) 
     num = int(num/2) 

     if modnum == 0: 
      alist.append(0) 
      print(alist) 


     elif modnum == 1: 
      alist.append(1) 
      print(alist) 
     func(num) 



alist = [] 
func(num) 
print(alist) 
print (alist[::-1]) 
+3

遞歸*和*循環快速實現這一點?似乎你需要選擇一種方式或另一種方式。 –

+0

你能解釋一下嗎?我知道我在循環中使用遞歸,但在這種情況下,它是否重要?我很新,所以任何幫助都會很樂意。 – Nawlidge

+0

爲什麼不使用'list(「{0:b}」.format(num))'來獲取列表? –

回答

3
  • 刪除遞歸。
  • 條件應該是num != 0
  • 刪除冗餘modnum檢查。

假設這些問題,我們可以寫

def func(num): 
    if num == 0: 
     return [num] 

    binary_digits = []  
    while num != 0: 
     modnum = int(num % 2) 
     num = int(num/2) 
     binary_digits.append(modnum) 
    return list(reversed(binary_digits)) 


num = int(input("Enter the Number")) 
binary_digits = func(num) 
print(binary_digits) 

例子:

>>> func(100) 
[1, 1, 0, 0, 1, 0, 0] 
0

你可以使用while循環來做你想做的事情。你可以嘗試這樣的事情:

num = int(input("Enter the Number")) 
def func(num): 
    #this while loop breaks when num == 1 
    while num != 1: 
     modnum = int(num%2) 
     num = int(num/2) 

     if modnum == 0: 
      alist.append(0) 
      print(alist) 


     elif modnum == 1: 
      alist.append(1) 
      print(alist) 
    #when is breaks, append 1 to your list 
    alist.append(1) 

alist = [] 
func(num) 
print(alist) 
print (alist[::-1]) 

由此將進入,當你進入一個無限循環,作爲輸入。但是,這是爲你解決

0

試試這個:

def func(num): 

if num <= 1: 
    alist.append(num) 
    return 
while num != 1: 
    modnum = int(num%2) 
    num = int(num/2) 

    if modnum == 0: 
     alist.append(0) 
     print(alist) 


    elif modnum == 1: 
     alist.append(1) 
    func(num) 
1
num = int(input("Enter the Number")) 
def func(num): 
    while num != 0: 
     modnum = int(num%2) 
     num = int(num/2) 
     alist.append(modnum) 


alist = [] 
func(num) 
print(alist) 
print (alist[::-1]) 

你不需要if用於追加右邊的數字,只是使用變量modnum。你還必須再次通過這個while -loop。在末尾func(num)的函數調用給你這些隨機數。

0

您可以通過執行

def func(num): 
    binary_digits = list("{0:b}".format(num)) 
    return binary_digits 
相關問題