The purpose of random.sample()
is to pick a subset of the input sequence, randomly, without picking any one element more than once. If your input sequence has no repetitions, neither will your output.
You are not looking for a subset; you want single random choices from the input sequence, repeated a number of times. Elements can be used more than once. Use random.choice()
in a loop for this:
for i in range(y):
string = ''.join([random.choice(x) for _ in range(v)])
print string
This creates a string of length v
, where characters from x
can be used more than once.
Quick demo:
>>> import string
>>> import random
>>> x = string.letters + string.digits + string.punctuation
>>> v = 20
>>> ''.join([random.choice(x) for _ in range(v)])
'Ms>V\0Mf|W@R,#/.P~Rv'
>>> ''.join([random.choice(x) for _ in range(v)])
'TsPnvN&qlm#mBj-!~}3W'
>>> ''.join([random.choice(x) for _ in range(v)])
'{:dfE;VhR:=_~O*,QG<f'
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…