1. 程式人生 > >每天一個小程式——第 0001 題:生成200個驗證碼

每天一個小程式——第 0001 題:生成200個驗證碼

# -*- coding: utf-8 -*-

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

根據以下考量寫一個完成這段程式碼:
1.生成指定個數隨機帶字母數字的隨機驗證碼
2.帶有主鍵,方便資料查詢
3.用一個識別符號連線驗證碼和主鍵

參考下面這位博主,自己複寫一遍:
http://liam0205.me/2015/05/07/generator-of-invitation-code-in-python/
"""

import string
import random

# 為了報錯需要做個class,不然那會出現錯誤未定義的報錯,具體原理尚不明確,待學習。
class LengthError(ValueError): def __init__(self, arg): self.args = arg # 生成一個隨機驗證碼 def code_generator(lenOfCode): poolOfChar = string.ascii_letters + string.digits randomCode = lambda x,y:''.join([random.choice(x) for i in range(y)]) return (randomCode(poolOfChar, lenOfCode)) # 生成主鍵(為保證驗證碼位數一致,在不足位數時,前面加0)
def key_generator(inputNum, lenOfKey): lenOfInput = len(str(inputNum)) if lenOfInput > (lenOfKey): raise LengthError("lenOfKey is too long!") else: return '0' * (lenOfKey - lenOfInput) + str(inputNum) """ 主要方法的引數: number : 驗證碼數量 lenOfCode :驗證碼 lenOfKey :主鍵長度 """
def code_factory(number=200, lenOfCode=15, lenOfKey=4): # 拼接驗證碼,識別符號和主鍵 tempCode, flg = '','L' #最後的問題出在這裡,number忘記加range(),導致無法迴圈 for n in range(number): try: yield (code_generator(lenOfCode)+ flg+ key_generator(n, lenOfKey)) except LengthError: print ("number is larger than the lenth of Key") if __name__ == '__main__': for code in code_factory(): print (code)