Python: How to 'refresh' random variables
<p>I have this code, i want to know if there is anyway i can get rid of all these variables and instead only have one for each purpose. My code is a password generator with three different password strengths. Code will work without this but for design sake i want to make it smaller. I've tried making them functions but that didn't work.  I'm probably missing something obvious:</p>

<pre><code>import time
import random
import string

ps = ""
name = ""
ans1 = ""
list_s = ["!","Â£","~","%","*","(","}","#",";","@","/",":","-"]
list_w = ["mouse","human","dog","tree","boom","thief","killer","dealer","feeler","man","woman","death"]
list_w2 =["help","yelp","empire","squire","lier","fryer","kitchen","bed","matress", "criminal","drug"]

rc1 = random.choice(string.ascii_lowercase)
rc2 = random.choice(string.ascii_lowercase)
rc3 = random.choice(string.ascii_lowercase)
rc4 = random.choice(string.ascii_lowercase)
rc5 = random.choice(string.ascii_uppercase)
rc6 = random.choice(string.ascii_uppercase)
rc7 = random.randrange(10)
rc8 = random.randrange(10)
rc9 = random.randrange(10)
rc10 = random.choice(list_s)
rc11 = random.choice(list_s)
rc12 = random.choice(list_w)
rc13 = random.choice(list_w2)

while name == "":
    name = str(input("Welcome to password64, before we begin enter your name:"))
while ans1 == "":
    ans1 = str(input("Have you used password64 before " + name + " ?"))

ans1 = ans1[0].lower()

if ans1 == "n":
    print ("Thank you for trying  password64 for the first time " + name + " !")
    time.sleep(4)
    print ("I will ask you the strength of the password you want, there will be three options: Strong, Medium or Weak")
    time.sleep(6)
    print ("A strong password is a mix of random numbers, letters and symbols")
    time.sleep(3)
print ("A medium password will be a couple of words with random numbers and symbols")
    time.sleep(3)
    print ("A weak password will be a couple of words with a number")
elif ans1 == "y":
    print ("Thank you for reusing password64 " + name + " !")
    time.sleep(2)
    print ("Let's get straight on with it then")


while ps == "":
    ps = str(input("Do you with to generate a strong, medium or weak password?"))
    ps = ps[0].lower()

if ps == "s":
    a = [rc1 , rc2, rc3, rc4, rc5, rc6, rc7, rc8, rc9, rc10, rc11]
elif ps == "m":
    a = [rc12, rc13, rc7, rc8, rc10, rc11]
elif ps == "w":
    a = [rc12, rc13, rc7]
else:
    print ("You did not enter a valid password strength")
    exit()

random.shuffle(a,random.random)

print ("Your password is generating....")

for i in range(0,len(a)):
    time.sleep(1)
    print (a[i], end="")
print ("")
print ("Your password is ready to be used " + name + ". Thank you for using    password64")
</code></pre>

<p>why don't you put the randoms into a function?</p>

<p>f.e.</p>

<pre><code># -*- coding: cp1252 -*-
import string
import random
import time

random_type = ("lower","upper","digit","strange","wordlist1","wordlist2")

list_s = ["!","Â£","~","%","*","(","}","#",";","@","/",":","-"]
list_w = ["mouse","human","dog","tree","boom","thief","killer","dealer","feeler","man","woman","death"]
list_w2 =["help","yelp","empire","squire","lier","fryer","kitchen","bed","matress", "criminal","drug"]

def random_part(which_type):
    if which_type == "lower":
        return random.choice(string.ascii_lowercase)
    elif which_type == "upper":
        return random.choice(string.ascii_uppercase)
    elif which_type == "digit":
        return str(random.randrange(10))
    elif which_type == "digit":
        return str(random.randrange(10))
    elif which_type == "strange":
        return random.choice(list_s)
    elif which_type == "wordlist1":
        return random.choice(list_w)
    else:
        return random.choice(list_w2)

def generate_pw(password_strength):
    if password_strength == 'w':
        l = ['wordlist1','wordlist2','digit']
    elif password_strength == 'm':
        l = ['wordlist1','wordlist2','digit','digit','strange','strange']
    else:
        l = ['wordlist1','wordlist2','digit','digit','strange','strange','lower','upper']  #whatever you want to

    result = []
    for x in l:
        result.append(random_part(x))
    return result

print generate_pw('s')
</code></pre>

<p>by the way: you could use only one word list, if you would eliminate the Chosen value from list. So you could use more than 2 words in your Password. Same you could do with strange chars, so every char could only appear once.
And jaou could shuffle the result.
But it is your decision</p>

python list variables random