python练习001及002

来源:互联网 发布:tomcat 多域名绑定 编辑:程序博客网 时间:2024/06/03 11:43

第 0001 题: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)?

第 0002 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。

首先,001题思路如下:
在百度过后选择了一种验证方式,就是随机生成15位数字加字母的组合,以L为区分线,主键为0-200的数字,不够的在左边补0,然后加入到之前生成的验证码中(这里我设主键为4位数字)。总体就是一个激活码了。

代码如下:

#coding=utf-8import randomimport stringclass LengthError(ValueError):    def __init__(self, arg):        self._arg = argdef code_char(length):    poolOfChar = string.ascii_letters + string.digits    # random 库中的 randint(inf, sup) 函数可以在指定的范围内产生一个随机整数;    # choice(sequence) 可以在一个有序的类型中(比如 list、tuple 或 string)随机选取一个元素。    randomChar = lambda x, y: "".join([random.choice(x) for i in range(y)])    return randomChar(poolOfChar, length)#验证主键长度是否大于你需要的长度,不够则在左边补0,多了则报错def pad_zero_toLeft(inputStr, totalLen):    strLen = len(inputStr)    if strLen > totalLen:        raise LengthError('生成的太长了。')    else:        return '0' * (totalLen - strLen) + inputStr#将随机生成的验证码和主键合在一起,并将主键作为数据库中的Id和激活码作为列表一起返回def code_fact(number = 200, length = 15, key = 4):    flg = 'L'    for i in range(number):        try:            yield [i ,code_char(length) + flg + pad_zero_toLeft(str(i), key)]        except LengthError:            print 'number is larger than the lenth of Key'#如果是此模块自己运行则运行,若是其他导入此模板则不运行。if __name__ == '__main__':    for code in code_fact():        print code

002很简单就不讲思路了,代码如下:

import mysql.connectorimport test001conn = mysql.connector.connect(user='root', password='123', database='test', use_unicode=True)cursor = conn.cursor()if __name__ == '__main__':    for i in test001.code_fact():        cursor.execute('insert into code(id, _key) values (%s, %s)', i)conn.commit()cursor.close()conn.close()

本人才疏学浅,仅供参考,如有疑问或建议,欢迎提出,一起进步。

原创粉丝点击