继续作题: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