2014-01-14 58 views
0

我有這樣的功能:函數返回的每個二進制數,直到一定的價值

def binary_numbers(a): 
    for x in range(1, a): 
     return bin(x) 

我想這是從0打印每一個二進制數my_input這個命令。

print binary_numbers(my_input) 

所以,如果我寫5,因爲我想爭論它打印

0b0 
0b1 
0b10 
0b11 
0b100 
0b101 

然而,當我把它用5這個我得到什麼:

>>> print binary_numbers(5) 
'0b1' 

誰能解釋我爲什麼?

+1

而你的問題是? – NPE

+1

基於您在SO上發佈的事實,出現了問題。如果你告訴我們你遇到了什麼錯誤,我們會有更好的幫助 – StephenTG

回答

5

的問題是,你的函數返回處理的第一個數字(因爲控制到達return語句)

四種方式來解決這個

  1. 打印立即

    def binary_numbers(a): 
        for x in range(1, a): 
         return bin(x) # Dont return here, instead print bin(x) 
    
    binary_numbers(5) 
    
  2. 之後
  3. 構建一個理解清單並返回它

    def binary_numbers(a): 
        return [bin(x) for x in range(1, a)] 
    
  4. 構造一個列表,map功能這樣

    def binary_numbers(a): 
        return map(bin, range(1, a)) 
    
  5. 創建一臺發電機,以yield關鍵字這樣

    def binary_numbers(a): 
        for x in range(1, a): 
         yield bin(x) 
    for current_binary_number in binary_numbers(5): 
        print current_binary_number 
    
0

上關機會,在那裏你」重新卡住其實得到"my_input"


根據您的大型應用程序,您有兩種選擇。

詢問它當你需要它:

def binary_numbers(a): 
    for x in range(1, a): 
     yield bin(x) 

a = int(raw_input('My Input: ')) 
print list(binary_numbers(a)) 

或者把它作爲一個命令行參數:> python binary_number.py 5

import sys 
def binary_numbers(a): 
    for x in range(1, a): 
     yield bin(x) 

a = int(sys.argv[1]) 
print list(binary_numbers(a)) 

您有其他選擇,比如從文件中讀取,但這些是互動的。

注意:我也改變了你的返回到一個收益率,並打印你的函數調用的列表表示形式。