又一天过去了,今天上午写了一下练习,下午老黄让我跟另外两个男生一起坐图像识别,或许是创新项目吧,试试团队的力量也不错。
回归正题:
第 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就可以生成唯一的值,也有理。这就像是密码学里面的明文和密文的关系。
晚安!
时间: 2024-10-13 11:13:28