2013-09-28 24 views
-2

只要循環條件未滿足,我想隨機生成一個字符。我希望我下面的代碼將工作,但它不會:針對特定循環條件生成隨機字符

import string 
import random 

def random_characters(number): 
    i = 0 
    new_string = '' 

    while (i < number) : 
     new_string = random.choice(string.ascii_lowercase) 
     i = i + 1 
     return new_string 


random_characters(3) 

當我運行這段代碼什麼也沒有發生,我沒有得到任何錯誤的任何反饋。我可能會以錯誤的方式使用return new_string,但即使這是我所缺少的,我也無法弄清楚。

+0

這可以幫助:是什麼'return'嗎?沒有什麼是返回](http://stackoverflow.com/questions/19066925/what-does-return-do-nothing-is-ever-returned)和順便說一句,你的'return'語句沒有正確縮進。 –

回答

3

首先,你return是內循環,所以你永遠不要多次循環。更改爲

def random_characters(number): 
    i = 0 
    new_string = '' 

    while (i < number) : 
     new_string = random.choice(string.ascii_lowercase) 
     i = i + 1 
    return new_string # <<< Dedent 

random_characters(3) 
#>>> 'c' 

然後,您需要實際構建new_string,而不是每次都設置它。構建list,然後"".join它:

def random_characters(number): 
    i = 0 
    letters = [] # Place to put the letters 

    while (i < number) : 
     letters.append(random.choice(string.ascii_lowercase)) # <<< Add the letter 
     i = i + 1 
    return "".join(letters) # <<< Join the letters into one string 

random_characters(3) 
#>>> 'lgp' 

那麼你應該使用for i in range(number)代替while循環:

def random_characters(number): 
    letters = [] 

    for i in range(number): # <<< Deals with i for you. 
     letters.append(random.choice(string.ascii_lowercase)) 

    return "".join(letters) 

random_characters(3) 
#>>> 'xay' 

你也可以使用一個縮短的版本與列表理解:

def random_characters(number): 
    # MAGIC! 
    letters = [random.choice(string.ascii_lowercase) for i in range(number)] 

    return "".join(letters) # <<< Join the letters into one string 

random_characters(3) 
#>>> 'yby' 

如果你是wanti爲了運行這個,你有幾個選擇。要麼你可以在互動解釋器中運行這個:

%~> python -i random_characters.py 
>>> random_characters(3) 
'zgp' 

,或者你可以告訴它print裏面的文件結果:

print(random_characters(3)) # Python 3 
print random_characters(3) # Python 2 
+0

請注意:如果你不打算使用'_'作爲循環變量,那麼就有一個慣例(或者說,很普遍)。 –

2

兩個原因:

  • 你放棄你創建(通過重新分配到相同的名稱)
  • 你只返回的第一個字符反正(由內環路返回)

人物相反,考慮這樣做:

import string 
import random 

def random_characters(number): 
    i = 0 
    random_chars = [] 

    while (i < number) : 
     random_chars.append(random.choice(string.ascii_lowercase)) # Store the char you generate 
     i = i + 1 

    return ''.join(random_chars) # Return once you have all the characters 

當然,這不是最Pythonic有辦法做到這一點。下面是不循環在一個人工條件的方式:

def random_characters(number): 
    return "".join((random.choice(string.ascii_lowercase) for _ in xrange(number))) 

注:這就是所謂的generator expression

+0

這仍然沒有回答:**當我運行此代碼時,什麼也沒有發生** –

+0

@hcwhsa如果您想要顯示某些輸出,您可能需要在'random_characters(3)'前面添加一個'print'語句:'print random_characters(3)'。現在,您正在生成隨機字符串並將其扔掉。 –

+0

這就是OP所要求的,而你在答案中沒有提及任何與之相關的東西。即使他們使用你的代碼,他們也不會輸出。 –