2016-10-17 77 views
0

我有這個代碼,我想知道如果有反正我可以擺脫所有這些變量,而只是爲每個目的有一個。我的密碼是具有三種不同密碼強度的密碼生成器。代碼將沒有這個工作,但爲了設計的緣故,我想讓它變小。我已經嘗試過讓它們起作用,但那不起作用。我可能錯過了一些明顯的東西:Python:如何'刷新'隨機變量

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") 
+1

用'r = lambda:random.choice(string.ascii_lowercase)'替換'r1'到'r6',每次你調用它或者使用'random',它會產生一個隨機字母。選擇(...)'直接創建密碼 –

回答

0

爲什麼不把randoms放到函數中?

f.e.

# -*- 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') 

順便說一句:如果您將消除列表中的選定值,則只能使用一個單詞列表。所以你可以在你的密碼中使用兩個以上的單詞。你可以用奇怪的字符做同樣的事情,所以每個字符只能出現一次。 而jaou可能會改變結果。 但是這是你的決定