写点什么

Python 应用之激活码生成器

作者:向阳逐梦
  • 2022 年 10 月 07 日
    四川
  • 本文字数:1315 字

    阅读完需:约 4 分钟

1. 问题的背景

假如你要为一个应用搞限时促销,生成激活码(或者优惠券),请用 Python 如何生成 200 个激活码(或者优惠券)。激活码的格式为 asqE-9xRK-lqWU-QkMT。

要求 1:使用随机生成时,生成数字概率为 1/5,大写字母和小写字母概率各为 2/5;

要求 2:200 个激活码。

2. 解题的思路


  • 第一步: 由于有生成概率,所以需要使用 random 模块

  • 第二步: 生成 200 个激活码,for 或者 while 循环

3. 解题的方法

方法一

import randomdef gen(x):    if x <= 0.4:        return random.choice(            ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'L', 'K', 'J', 'H', 'G', 'F', 'D', 'S', 'A', 'Z', 'X',             'C', 'V', 'B', 'N', 'M'])    elif x <= 0.8:        return random.choice(            ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', 'l', 'k', 'j', 'h', 'g', 'f', 'd', 's', 'a', 'z', 'x',             'c', 'v', 'b', 'n', 'm'])    else:        return random.choice(['1', '2', '3', '4', '5', '6', '7', '8', '9', '0'])def gen1():    a = [''] * 19    for i in range(19):        x = random.random()        if (i + 1) % 5 != 0:            a[i] = gen(x)        else:            a[i] = '-'    return afor _ in range(200):    print(''.join(gen1()))
复制代码

第 1 行: 引入 random 随机模块

第 2 行: 创建函数 gen(x)用于为各个数字及字母设置出现概率,其中自变量 x 为 0-1 之间随即出现的浮点型小数

第 3-6 行: 当 x<=0.4 时,即出现概率为 4/10 即 0.4,随机选择大写字母中的一个

第 7-10 行: 当 0.4<x<=0.8 时,即出现概率为 4/10 即 0.4,随机选择小写字母中的一个

第 11-12 行: 其他情况下即 x>0.8 时,即出现概率为 2/10 即 0.2,随机选择一个数字

第 13 行: 创建函数 gen1()用于随机生成激活码

第 14 行: 由于一个激活码内 19 个元素,创建列表 a 并为其内部添加 19 个元素

第 15-16 行: for 循环运行 19 次,并为 x 赋值 0-1 的随机浮点型小数

第 17-18 行: 当循环次数不是 5 的倍数时,给 a 列表中的对应位置赋值 gen(x)函数生成的随机数字或字母

第 19-20 行: 当循环次数是 5 的倍数时,给 a 列表中的对应位置赋值激活码中的字符'-'

第 21 行: 将列表 a 返回给函数值

第 22 行: 循环 200 次

第 23 行: 输出 200 个激活吗,join 函数将列表中的各种元素连在一起

代码运行结果为:


方法二

import randomimport string number = 30#激活码的数量length = 12#激活码的长度 def made(): #生成激活码    #activation_code = string.join(random.sample('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456',length)).replace(" ","")#python2语法    activation_code = ''.join(random.sample('ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',length)).replace(" ","")#python3语法    return activation_code a = {1:made()}#print('生成数量:',a)def judge():#判断生成的激活码是否和字典中存在的激活码重复    new_made = made()    for k in a:        if a[k] != new_made:            return new_made        else:            judge() for i in range(2,number+1):    a[i] = judge() for j in a:    print('%4d'%(j),'   ', a[j])
复制代码

显示结果为:



发布于: 刚刚阅读数: 3
用户头像

向阳逐梦

关注

人生享受编程,编程造就人生! 2022.06.01 加入

InfoQ签约作者、阿里云“乘风者计划”签约博主

评论

发布
暂无评论
Python应用之激活码生成器_Python语法_向阳逐梦_InfoQ写作社区