生成唯一的随机字符串

3
我想创建一个生成随机字符串的代码(例如,在这种情况下为10个)。我使用以下代码,但该代码一直生成相同的字符串。
输入代码
import random
import string

s = string.ascii_lowercase
c = ''.join(random.choice(s) for i in range(8))

for x in range (0,10):
    print(c)

输出

ashjkaes
ashjkaes
ashjkaes
ashjkaes
ashjkaes
ashjkaes
ashjkaes
ashjkaes
press any key to continue .....

请帮助


7
你需要将random.choice放在for循环中,以便每次生成一个新的选择。 - Mark
5个回答

7

现在您所做的是生成一个随机字符串c,然后将其打印10次。相反,您应该将生成过程放在循环内部,以便每次生成一个新的字符串。

import random
import string

s = string.ascii_lowercase

for i in range(10):
    c = ''.join(random.choice(s) for i in range(8))
    print(c)

1
不能保证字符串是唯一的。虽然概率很低,但有可能会生成两个相同的字符串。 - Tomerikoo

2
自Python 3.6版本开始,您可以使用random.choices函数(详见这个回答)。例如:
import random
import string

sample = "".join(random.choices(string.ascii_lowercase, k=10))
print(sample)

2

正如已经指出的那样,在循环内部需要使用random.choice,我想要注意的是,您可以将下划线 (_) 与 for 结合使用,表示我不关心该变量,在这种情况下它的含义为:

注:此处 underscore 表示下划线。

import random
import string

s = string.ascii_lowercase
for _ in range(10):
    c = ''.join(random.choice(s) for _ in range(8))
    print(c)

我不希望你感到有义务这么做,但是请知道在Python语言中存在这样的约定。
最初的回答: 我不强求你这么做,但要知道Python语言中存在这种惯例。

1
尝试以下操作以达到您想要的结果。
import random
import string

s = string.ascii_lowercase

for x in range (0,10):
    print(''.join(random.choice(s) for i in range(8)))

1
这将为您提供包含数字、大写字母和小写字母的随机字符串。
import string, random
random_string=''
for x in range(8):
    if random.choice([1,2]) == 1:
        random_string += random_string.join(random.choice(string.ascii_letters))
    else:
        random_string += random_string.join(random.choice(string.digits))
print(random_string)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接