第1.2題:使用 Python 如何生成 200 個(gè)激活碼

題目來(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")

以上

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容