0001

又一天过去了,今天上午写了一下练习,下午老黄让我跟另外两个男生一起坐图像识别,或许是创新项目吧,试试团队的力量也不错。

回归正题:

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

想法只有一个解决方案,那就是把字母的随机数与数字的随机数放在一起就是激活码了,后来就想不到其他方法,参照了这几个算法:http://www.blogjava.net/BearRui/archive/2010/10/19/unique_random_code.html,然后根据这四个算法,写出了如下三种解决方案:

1、代码如下:

 1 # coding=utf-8
 2 __author__ = 'wing1995'
 3 """
 4 单纯的随机数字和字母的组成
 5 """
 6 import string as s
 7 import random as r
 8 
 9 
10 def ranDom():
11     f = open('随机激活码.txt', 'w+')
12     for i in range(200):
13         random_str = ''.join(r.choice(s.ascii_uppercase + s.digits) for x in range(10)) + '\n'
14         f.write(random_str)
15     f.close()
16 
17 if __name__ == '__main__':
18     ranDom()

优点:或许是头脑简单吧,一般人都想得出来。

缺点:当数据量比较大的时候,重复的可能性大。

2、

 1 # coding=utf-8
 2 __author__ = 'wing1995'
 3 """
 4 直接使用uuid模块
 5 """
 6 import uuid as u
 7 
 8 
 9 def rand_uuid():
10     f = open('随机激活码_1.txt', 'w+')
11     for i in range(200):
12         ID = str(u.uuid1()) + '\n'
13         f.write(ID)
14     f.close()
15 
16 if __name__ == '__main__':
17     rand_uuid()

优点:因为是借助别人写的模块,因此代码简单。

缺点:产生的数据量较大,而且差别不是很大

3、

 1 # coding=utf-8
 2 __author__ = 'wing1995'
 3 """
 4 使用主键和随机码
 5 """
 6 import string as s
 7 import random as r
 8 
 9 
10 def rand_ID():
11     f = open('随机激活码_2.txt', 'w+')
12 
13     for i in range(200):
14         ID = id(i)
15         rand_id = str(ID)[5:]  # 选取id的后面5位数字
16         null = ''
17         for j in rand_id:
18             null += j + r.choice(s.ascii_uppercase)  # 在每一个数字后面添加一个大写字母
19         f.write(null + '\n')
20     f.close()
21 
22 if __name__ == '__main__':
23     rand_ID()

优点:使用简单,可以直接根据激活码得出id

缺点:按道理是有的,如果id是根据数据库的主键编号得来的话

其实还有第四种方法:

先获取id,然后将id转换为8进制,并转换成字符串,在字符串后面加一个固定的字符例如“9”,最后在这串字符串后面加上随机的数字,得到的就是随机的数字激活码了。但是觉得方法跟第三类差不多,只不过是一种钥匙而已,还有人说用MD5就可以生成唯一的值,也有理。这就像是密码学里面的明文和密文的关系。

晚安!

 

posted @ 2015-05-07 22:41  wing1995  阅读(718)  评论(0编辑  收藏  举报