2017-07-14 49 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

相关问题