python练习——第1题

Posted dzha

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python练习——第1题相关的知识,希望对你有一定的参考价值。

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

代码:

#coding=utf-8
import random, string

number = 20 # 激活码的数量
length = 12 # 激活码的长度
box = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' # 激活码的组成元素
keys = {} # 用于保存生成的激活码

temp_key = ''.join(random.sample(box, length)) # 生成第一个激活码
k = 0 # 激活码的索引
keys[k] = temp_key
while(True):
    temp_key = ''.join(random.sample(box, length))
    for j in list(keys.keys()): # 判断新生成的激活码是否和以前的相同
        if keys[j] == temp_key: # 如果相同则重新生成
            break
        elif j == (len(keys) - 1): # 如果新生成的激活码和之前的激活码都不一样,则将新激活码加入keys
            k += 1
            keys[k] = temp_key
        else:
            continue
    if k == number - 1: # 已经生成足够的激活码,则结束
        break

for i in keys:
    print(keys[i])

效果如下:
技术图片

分析:
这道题主要就是需要懂得如何将字母和数字以随机的方式组合起来,还有就是要保证生成的激活码没有重复的。因为每生成一个新激活码都要和已有的其他激活码比较是否相同,所以程序时间复杂度为O(n^2),比较慢。

在网上看见另外一种简便的方法:

import uuid

uuids = []
for i in range(200):
    uuids.append(uuid.uuid1())
print uuids

以上是关于python练习——第1题的主要内容,如果未能解决你的问题,请参考以下文章

python练习——第4题

python3练习100题——028

python3练习100题——008

Leetcode练习(Python):链表类:第206题:反转链表:反转一个单链表。

Leetcode练习(Python):链表类:第92题:反转链表 II:反转从位置 m 到 n 的链表。请使用一趟扫描完成反转。

python3练习100题——011