2017-07-14 80 views
1
import random 


def random_letters(): 
    x = random.randrange(0, 28) 
    for i in range (1,29): 
    n = ["a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h", "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p", "r", "s", "ş", "t", "u", "ü", "v", "y", "z"] 
    print (n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x], n[x]) 

random_letters() 

以上是我嘗試在每次調用random_letters()方法時打印一個字母的隨機混排,儘管它不起作用。我可以用什麼方法來產生這種效果?如何每次給一個變量不同的隨機值?

+2

'random.choice (N)'? – Will

+0

生成一個範圍列表,「洗牌」它,然後通過它打印字符。 –

+1

作爲一個旁註,我會推薦'[範圍(26)]中的[[chr(ord('a')+ i)'而不是列表聲明的長期可憎之處。對這些事情聰明! –

回答

1

你寫的東西不起作用,因爲x = random.randrange(0, 28)返回一個隨機數,當你打印n[x]時,它總是會是同一個字符。即使您在for循環內聲明x = random.randrange(0, 28),也不足以確保每個字符都不相同,因爲它必須在所有循環中生成所有不同的數字,這是非常不可能的。

一種解決方法是具有相同長度的作爲字符創建範圍列表列表中,然後用random.shuffle洗牌它和打印字符使用所述混洗表的索引列表:

from random import shuffle 

def random_letters(length): 
    n = ["a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h", "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p", "r", "s", "ş", "t", "u", "ü", "v", "y", "z"] 
    list1 = list(range(len(n))) 
    shuffle(list1) # Try printing list1 after this step 
    for i in range(length): 
     print(n[list1[i]],end="") # The end paramater is here to "concatenate" the characters 

>>> random_letters(6) 
grmöçd 
>>> random_letters(10) 
mbzfeıjkgş 
+0

我試圖改變這一點,我寫了'list1 = list(range( 6))'而不是'list1 = list(range(6))''但是然後它開始只使用前6個字母,怎麼可能用你的方法避免這個? –

+0

你想傳遞一個參數來決定多長時間是字符串?如果是的話,你應該修改的是for循環,在範圍(長度)中使用'for i:'和'print(n [list1 [i]],end =「」)'。 –

+1

Yes,for實例當我添加像'random_letters(int(input(「letter_count」)))''我想要有這麼多的字母作爲我的結果。 –

0
import random 
import numpy as np 

n = np.array(["a", "b", "c", "ç", "d", "e", "f", "g", "ğ", "h", "ı", "i", "j", "k", "l", "m", "n", "o", "ö", "p", "r", "s", "ş", "t", "u", "ü", "v", "y", "z"]) 
nLength = np.arange(len(n)) #Generate an array from 0 to the length of n 
np.random.shuffle(nLength) #Randomly shuffle that array 
def random_letters(): 
    m = n[nLength]   #Set m equal to a reordered n according to nLength 
    print (m) 

random_letters() 

@ coldspeed的方法工作得很好,只是使它成爲我的方法工作的np.array。

如果你決定你只希望它每次返回相同的隨機字符串,上面的洗牌方法設置

np.random.seed(*some number*) 

+1

如果你是一個初學者,並且有人對你大加嘲諷,那將會讓你大吃一驚。 ;( –

+0

嗯...一個公平的點,雖然一個很好的介紹,最終會成爲他們非常有用的庫,否?:] – SeeDerekEngineer

相關問題