Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"sample larger than population" in random.sample python

Tags:

creating a simple pass generator for myself, i noticed that if i want my population to be digits only (0-9) which is overall 10 options, if i want my length over 10, it wont use any of the digits more then once and return the "sample larger then population" error.

is it possible to maintain the code, but add/reduce code lines so it works? or do i HAVE To use a use random choice?

import string
import random

z=int(raw_input("for: \n numbers only choose 1, \n letters only choose 2, \n letters and numbers choose 3, \n for everything choose 4:"))

if z==1:
    x=string.digits
elif z==2:
    x=string.letters
elif z==3:
    x=string.letters+string.digits
elif z==4:
    x=string.letters+string.digits+string.punctuation
else:
    print "die in a fire"

y=int(raw_input("How many passwords would you like?:"))
v=int(raw_input("How long would you like the password to be?:"))

for i in range(y):
    string=""
    for n in random.sample(x,v):
        string+=n
    print string

ty

like image 399
Giladiald Avatar asked Dec 31 '13 18:12

Giladiald


People also ask

Is sample larger than population?

A population is the entire group that you want to draw conclusions about. A sample is the specific group that you will collect data from. The size of the sample is always less than the total size of the population.

How do you create a random sample in Python?

You can use random. randint() and random. randrange() to generate the random numbers, but it can repeat the numbers. To create a list of unique random numbers, we need to use the sample() method.

How can you pick a random item from a list or tuple?

In Python, you can randomly sample elements from a list with choice() , sample() , and choices() of the random module. These functions can also be applied to a string and tuple. choice() returns one random element, and sample() and choices() return a list of multiple random elements.

What is random sampling in Python?

Python Random sample() Method The sample() method returns a list with a randomly selection of a specified number of items from a sequnce. Note: This method does not change the original sequence.


2 Answers

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'
like image 196
Martijn Pieters Avatar answered Sep 21 '22 02:09

Martijn Pieters


Since the python_3.6 you can use random.choices(x, k=v) for your purpose. It returns a k sized list of elements chosen from the population with replacement. If the population is empty, raises IndexError.

like image 24
Александр Морковин Avatar answered Sep 22 '22 02:09

Александр Морковин