題目來(lái)自:Python 練習(xí)冊(cè),每天一個(gè)小程序,今天做的是第二題,使用 Python 如何生成 200 個(gè)激活碼。更多見(jiàn):iii.run
random模塊介紹
我們可以使用python中的random模塊,用于生成隨機(jī)浮點(diǎn)數(shù)、整數(shù)、字符串,甚至幫助你隨機(jī)選擇列表序列中的一個(gè)元素,打亂一組數(shù)據(jù)等。
random模塊五個(gè)函數(shù)
- random() 返回0<=n<1之間的隨機(jī)實(shí)數(shù)n;
- choice(seq) 從序列seq中返回隨機(jī)的元素;
- getrandbits(n) 以長(zhǎng)整型形式返回n個(gè)隨機(jī)位;
- shuffle(seq[, random]) 原地指定seq序列;
- sample(seq, n) 從序列seq中選擇n個(gè)隨機(jī)且獨(dú)立的元素;
random模塊方法說(shuō)明
- random.random()函數(shù)是這個(gè)模塊中最常用的方法了,它會(huì)生成一個(gè)隨機(jī)的浮點(diǎn)數(shù),范圍是在0.0~1.0之間。
- random.uniform()正好彌補(bǔ)了上面函數(shù)的不足,它可以設(shè)定浮點(diǎn)數(shù)的范圍,一個(gè)是上限,一個(gè)是下限。
- random.randint()隨機(jī)生一個(gè)整數(shù)int類型,可以指定這個(gè)整數(shù)的范圍,同樣有上限和下限值,python random.randint。
- random.choice()可以從任何序列,比如list列表中,選取一個(gè)隨機(jī)的元素返回,可以用于字符串、列表、元組等。
- random.shuffle()如果你想將一個(gè)序列中的元素,隨機(jī)打亂的話可以用這個(gè)函數(shù)方法。
- random.sample()可以從指定的序列中,隨機(jī)的截取指定長(zhǎng)度的片斷,不作原地修改。
使用random直接隨機(jī)抽取
從26個(gè)大小字母+10個(gè)數(shù)字,隨機(jī)選取10個(gè)數(shù)字,組成一組激活碼。重復(fù)此過(guò)程200次即可。
設(shè)定字符串內(nèi)容
import random, string
chars = string.letters + string.digits
print chars
輸出內(nèi)容為:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789
從給定內(nèi)容中隨機(jī)選取
使用random.choice()和random.sample()兩個(gè)函數(shù)
s= "".join(random.choice(chars) for i in range(10))
gene = "".join(random.sample(chars, 10))
print s +" /////// " + gene
其中s與gene分別可以獲得兩個(gè)隨機(jī)序列,從這里我們可以看出兩個(gè)函數(shù)使用上的差異,相對(duì)來(lái)說(shuō),random.sample()簡(jiǎn)單一些。
使用UUID
UUID是128位的全局唯一標(biāo)識(shí)符,通常由32字節(jié)的字符串表示。 它可以保證時(shí)間和空間的唯一性,也稱為GUID,全稱為:Universally Unique IDentifie。
UUID的五種實(shí)現(xiàn)方法
- uuid1()——基于時(shí)間戳
由MAC地址、當(dāng)前時(shí)間戳、隨機(jī)數(shù)生成。可以保證全球范圍內(nèi)的唯一性,但MAC的使用同時(shí)帶來(lái)安全性問(wèn)題,局域網(wǎng)中可以使用IP來(lái)代替MAC。 - uuid2()——基于分布式計(jì)算環(huán)境DCE(Python中沒(méi)有這個(gè)函數(shù))
算法與uuid1相同,不同的是把時(shí)間戳的前4位置換為POSIX的UID,實(shí)際中很少用到該方法。 - uuid3()——基于名字的MD5散列值
通過(guò)計(jì)算名字和命名空間的MD5散列值得到,保證了同一命名空間中不同名字的唯一性,和不同命名空間的唯一性,但同一命名空間的同一名字生成相同的uuid。 - uuid4()——基于隨機(jī)數(shù)
由偽隨機(jī)數(shù)得到,有一定的重復(fù)概率,該概率可以計(jì)算出來(lái)。 - uuid5()——基于名字的SHA-1散列值
算法與uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法
使用UUID生成激活碼
import uuid
for i in range(20):
print uuid.uuid1()
輸出:
ebb4911e-ed1e-11e6-82ec-708bcda57790 ebb4b82e-ed1e-11e6-9f24-708bcda57790 ebb4b82f-ed1e-11e6-9d5c-708bcda57790 ebb4b830-ed1e-11e6-9f8b-708bcda57790 ebb4b831-ed1e-11e6-89d4-708bcda57790 ebb4b832-ed1e-11e6-903a-708bcda57790 ebb4b833-ed1e-11e6-9038-708bcda57790 ebb4b834-ed1e-11e6-b1dc-708bcda57790 ebb4b835-ed1e-11e6-8fb8-708bcda57790 ebb4b836-ed1e-11e6-a399-708bcda57790 ebb4b837-ed1e-11e6-a9a0-708bcda57790 ebb4b838-ed1e-11e6-8f85-708bcda57790 ebb4b839-ed1e-11e6-9ac2-708bcda57790 ebb4b83a-ed1e-11e6-8f48-708bcda57790 ebb4b83b-ed1e-11e6-b6d8-708bcda57790 ebb4b83c-ed1e-11e6-9bde-708bcda57790 ebb4b83d-ed1e-11e6-b03f-708bcda57790 ebb4b83e-ed1e-11e6-ac70-708bcda57790 ebb4b83f-ed1e-11e6-baf1-708bcda57790 ebb4b840-ed1e-11e6-a694-708bcda57790
寫入文件代碼示例
import random
import string
FIELD = string.digits + string.letters
def generate(n, many=1, where=None):
def getCode(n):
return "".join(random.sample(FIELD, n))
gene = [getCode(n) for i in range(many)]
return gene
def writeIn(n, many, where):
count = 1
for i in generate(n, many):
with open(where, "a") as boom:
boom.write(str(count).rjust(3)+" "+i+"\n")
count += 1
if __name__ == '__main__':
writeIn(20, 200, "coupon.txt")
以上