练习地址:https://github.com/Yixiaohan/show-me-the-code
# -*- 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)