如何每次给变量不同的随机值?

时间:2017-07-14 03:46:39

标签: python python-3.x

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 个答案:

答案 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方法之上。