Python 練習冊,天天一個小程序 -- 0001題

繼續作題:python

第 0001 題:作爲 Apple Store App 獨立開發者,你要搞限時促銷,爲你的應用生成激活碼(或者優惠券),使用 Python 如何生成 200 個激活碼(或者優惠券)?git


分析問題:app

通常來講,公司在搞活動的時候都會有批量的激活碼放出,通常激活碼的格式都是  xxxxx-xxxxx...的格式,而且是隨機生成的,我這裏使用到的是 python的random模塊。dom

解決問題:ide

簡單的實現以下:
函數

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
def create_key(key_num,key_fmt):
    key = ''
    temp_list = []
    for i in range(key_fmt):
        for i in range(key_num):
            if i != random.randrange(0,3):
                string = chr(random.randint(65,90))
            else:
                string = random.randint(0,9)
            key+=str(string)
        temp_list.append(key)
        key = ''
    return ('-').join(temp_list)
if __name__ == '__main__':
    print create_key(5,5)

可是,百度了一下別人的實現方式,發現本身的代碼好low啊,別人的代碼都比較的精簡,仍是寫的少啊,下面借鑑別人的代碼:post

他主要使用到了三個函數:學習

# 第一個:肯定生成隨機組合的個數
# 第二個:肯定每一個激活碼有幾組
# 第三個:肯定生成激活碼的個數
# 激活碼相似於  asqE-9xRK-lqWU-QkMT


具體代碼:優化

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import string
filed = string.digits+string.letters
def get_random():
    return ''.join(random.sample(filed,4))
def concatenate(n):
    return '-'.join([get_random() for i in range(n)])
def generate(n):
    return [concatenate(4) for i in range(n)]

if __name__ == '__main__':
    print generate(200)

這裏主要使用到了 列表推導式,簡化了代碼,提高了可讀性spa

之後編寫代碼須要注意:

1  編寫以前先思考 實現的流程

2  整理並優化實現的流程

3  儘可能用精簡的代碼表達複雜的意思

4  多學習一下別人代碼的實現方式

後記:

這裏只是簡單的實現生成優惠券,可是沒有考慮到重複性這個問題,在實際的生產環境中使用確定不行,怎麼生成惟一性的key,這個是後續須要解決的問題。能夠參考這篇文章:

http://linsir.org/post/Creat-the-unique-activation-code-with-python

參考文章:

http://blog.csdn.net/huangxiongbiao/article/details/45016649

http://www.oschina.net/code/snippet_1866842_45177

相關文章
相關標籤/搜索