需求:
產生N條郵箱號
1、寫一個函數,這個函數的功能是,傳入一個數字,產生N條郵箱
2、產生的郵箱不能重復,且郵箱前面的長度是6-12之間
3、產生的郵箱必須包含大寫字母、小寫字母、數字和特殊字符
4、郵箱后綴可以選擇163.com、qq.com、sina.com、126.com
思路:
必須包含大寫、小寫、數字、特殊字符,產生的N個手機號不能重復:
1、方法一:可以在大寫、小寫、數字、特殊字符里面每樣取幾個字符,這樣就同時包含四種字符了。
2、方法二:取到的郵箱號分別與大寫、小寫、數字、特殊字符取交集來判斷是否同時包含了四種字符。
注:while()循環:當while后面的條件為真,才執行while循環體內的while suite,直到條件為假時,退出循環。
1 import random 2 import string 3 #方法一:
4 def random_email(n): 5 emails=set()#定義一個空的集合,存儲生成的N個郵箱號
6 while len(emails)!=n: 7 email_len=random.randint(6,12) #指定一個范圍隨機取整數
8 email_end=random.choice(('@163.com', '@qq.com', '@sina.com', '@126.com')) #隨機取一個元素
9 #在小寫、大寫、特殊字符、數字里分別每樣取一個字符,長度為4
10 email_s=random.choice(string.ascii_lowercase)+random.choice(string.ascii_uppercase)+random.choice(string.punctuation)+random.choice(string.digits) 11 #剩下的2-8個字符在大小寫、特殊字符、數字中隨機取出來
12 str=string.digits+string.punctuation+string.ascii_letters 13 str_len=email_len-4
14 email_e=random.sample(str,str_len) #隨機選取幾個元素,返回list
15 email_start=list(email_s)+email_e #字符串轉list
16 random.shuffle(email_start) #打亂列表,返回值為空
17 email=''.join(email_start)+email_end+'\n' #一個完整的郵箱號 list轉字符串
18 emails.add(email) 19 with open('user.txt','w') as fw: 20 fw.writelines(emails) 21
22 #方法二:
23 def random_email2(n): 24 emails=set() #定義一個空的集合,存儲生成的N個郵箱號
25 while len(emails)!=n: 26 email_len=random.randint(6,12) #指定一個范圍隨機取整數
27 email_start=random.sample(string.ascii_letters+string.punctuation+string.digits,email_len) #sample()隨機取幾個元素,返回值是list ''.join() :list轉字符串
28 email_end=random.choice(('@163.com', '@qq.com', '@sina.com', '@126.com')) #隨機取一個元素
29 #取到的郵箱號分別與大寫、小寫、數字、特殊字符取交集來判斷是否同時包含了四種字符。
30 if set(email_start) & set(string.ascii_lowercase) and \ 31 set(email_start) & set(string.ascii_uppercase) and \ 32 set(email_start) & set(string.punctuation) and \ 33 set(email_start) & set(string.digits): 34 email=''.join(email_start)+email_end+'\n' #list轉字符串
35 emails.add(email) 36 with open('user.txt','w') as fw: 37 fw.writelines(emails)