一日一练——Python小白练习册第0001题

正处于寒假中,作者偶然看到Github上新手Python练习小程序。于是决定开始刷题。在此期间记录学习过程。还望感兴趣的各位能指点其不足之处和多多交流。

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

个人理解

看到这道题,脑子里第一个问题是什么是激活吗(或优惠卷)?想起大学时期有段时间玩侠客风云传。购买激活码对客户端进行激活才可以玩。
侠客风云传激活界面
电子优惠卷

那么个人理解这道题的内容应该就是打印出类似于AAAA-BBBB-CCCC-DDDD或者a1b2 c3d4 e5f6这样的形式。其中运行出来的结果应该是随机的。想到随机,就想到了random

import random

for i in range(4):
    if(i!=3):
        print(random.randint(AAAA,ZZZZ),end="")
        print("-",end="")
    else:
        print(random.randint(AAAA,ZZZZ))    

然而运行结果:
在这里插入图片描述
上网查了一下Python随机函数random使用详解。发现:

random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b,
注意: 下限必须小于上限

import random
print (random.randint(11, 20))  #生成的随机数n: 12 <= n <= 20  
print (random.randint(20, 20))  #结果永远是20

结果:

14
20

原来random.randint()只能生成整数型。那random里有没有能按照我的思路解决问题的函数呢?还真有,random.choice()

random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。有关sequence可以查看python手册数据模型这一章

import random
print (random.choice("Pythontab.com"))
print (random.choice(["python", "tab", "com"]))
print (random.choice(("python", "tab", "com")))

结果:

t
python
tab

OK,那我想要得到激活码的格式。就可以这样写了:

import random

sequence="0123456789ABCDEFGHIGKLMNOPQRSTUVWXYZ"
code=""

for number in range(200):
    for i in range(4):
        if (i!=3):
            for j in range(4):
                code+=random.choice(sequence)
            code+="-"

        else:
            for h in range(4):
                code+=random.choice(sequence)
            code+="  " 

print(code)

结果:
在这里插入图片描述

很好,这样子就应该OK了。来看看网络上大佬们的解决思路。

大佬们的解决方案

import uuid

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

在这里插入图片描述
Σ( ° △ °|||)︴啥是uuid?

UUID 是 通用唯一识别码(Universally Unique Identifier)的缩写,是一种软件建构的标准,亦为开放软件基金会组织在分布式计算环境领域的一部分。其目的,是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID。
uuid.uuid1(node=None, clock_seq=None)
基于主机ID,序列号,当前时间生成UUID。如果未给出节点,则使用getnode()来获取硬件地址。如果给定clock_seq,则将其用作序列号;否则选择随机的14比特序列号。如果你想要唯一的 ID, 你可以调用uuid1() or uuid4()。值得注意的是 uuid1()创建的UUID包含网络地址,可能会有安全问题。而uuid4()则创建一个随机的UUID。

总结

看到激活码样式的时候,脑子里想到的是随机的字母与数字的结合。然而真正的激活码是具备唯一性的。之前不知道uuid,这次对其进行了了解。这就是我对这道题的收获。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值