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()方法时打印随机的字母改组,尽管它不起作用。我可以使用什么方法来产生这种效果?
答案 0 :(得分:1)
你所写的内容不起作用,因为x = random.randrange(0, 28)
会返回一个随机数,当你打印n[x]
时,它总是会是同一个字符。即使您在x = random.randrange(0, 28)
循环中声明for
,也不足以确保每个字符都不同,仅仅因为它必须在所有循环中生成所有不同的数字,这是非常不可能的。
一种解决方法是创建一个与字符列表长度相同的范围列表,然后使用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ş
答案 1 :(得分: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&#39的方法效果也不错,只需将它设为上面的np.array即可使我的方法工作。
如果您决定每次只希望它返回相同的随机字符串,请设置
np.random.seed(*some number*)
在shuffle方法之上。