繼續作題: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