每天一个小程序——第 0001 题:生成200个验证码

练习地址: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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值