Python 练习册,天天一个小程序 -- 0001题

继续作题:python

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


分析问题:app

通常来讲,公司在搞活动的时候都会有批量的激活码放出,通常激活码的格式都是  xxxxx-xxxxx...的格式,而且是随机生成的,我这里使用到的是 python的random模块。dom

解决问题:ide

简单的实现以下:
函数

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
def create_key(key_num,key_fmt):
    key = ''
    temp_list = []
    for i in range(key_fmt):
        for i in range(key_num):
            if i != random.randrange(0,3):
                string = chr(random.randint(65,90))
            else:
                string = random.randint(0,9)
            key+=str(string)
        temp_list.append(key)
        key = ''
    return ('-').join(temp_list)
if __name__ == '__main__':
    print create_key(5,5)

可是,百度了一下别人的实现方式,发现本身的代码好low啊,别人的代码都比较的精简,仍是写的少啊,下面借鉴别人的代码:post

他主要使用到了三个函数:学习

# 第一个:肯定生成随机组合的个数
# 第二个:肯定每一个激活码有几组
# 第三个:肯定生成激活码的个数
# 激活码相似于  asqE-9xRK-lqWU-QkMT


具体代码:优化

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import random
import string
filed = string.digits+string.letters
def get_random():
    return ''.join(random.sample(filed,4))
def concatenate(n):
    return '-'.join([get_random() for i in range(n)])
def generate(n):
    return [concatenate(4) for i in range(n)]

if __name__ == '__main__':
    print generate(200)

这里主要使用到了 列表推导式,简化了代码,提高了可读性spa

之后编写代码须要注意:

1  编写以前先思考 实现的流程

2  整理并优化实现的流程

3  尽可能用精简的代码表达复杂的意思

4  多学习一下别人代码的实现方式

后记:

这里只是简单的实现生成优惠券,可是没有考虑到重复性这个问题,在实际的生产环境中使用确定不行,怎么生成惟一性的key,这个是后续须要解决的问题。能够参考这篇文章:

http://linsir.org/post/Creat-the-unique-activation-code-with-python

参考文章:

http://blog.csdn.net/huangxiongbiao/article/details/45016649

http://www.oschina.net/code/snippet_1866842_45177

相关文章
相关标签/搜索