练习地址: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)