python兑换码生成

网上参考的一个生成兑换码函数

# encoding=utf8
import random
import string

def _int_to_str(x, base=36):
    """Reversed version of int(s, base=?). src: http://stackoverflow.com/questions/2267362/"""
    numerals = string.digits + string.lowercase + string.uppercase
    numerals.replace('0','')
    numerals.replace('o','')
    if x == 0:
        return numerals[0]
    sign = -1 if x < 0 else 1
    x *= sign
    digits = []
    while x:
        digits.append(numerals[x % base])
        x /= base
    if sign < 0:
        digits.append(u'-')
    return u''.join(reversed(digits))

n_codes = 10  # 生成兑换码个数
rand_len = 6 #这里可以随意传入想要生成的位数
rand_limit = 36 ** rand_len
prefix = 'TX'

for x in xrange(0,n_codes):
    rand = _int_to_str(random.randrange(0, rand_limit), base=36).zfill(6)
    code_text = prefix + rand

    print code_text

这里使用了一个_int_to_str的方法 传入的x则是0-36的n次方中间的任意一个数,然后 base为36. 下面为整个函数的解析

  1. 下面_int_to_str函数 使用了一个 string模块 然后将0-9a-zA-Z包含到了一个叫numerals的变量之中。

  2. 如果x==0 那么返回0

  3. sign等于 如果x<0 sign等于-1 否则等于1 这一句判断传入的x是否为一个负数。并且取出其符号 从这一句可以看到 这个通用函数 其实并不是 前面这个作者自己写的。而是一个通用使用方法。用于解析指定base多少位数使用。 这里后面再讨论。

  4. 如果为负数 转为正数

  5. 申明一个digits = []

  6. digits追加(numerals[传入x % base])

  7. x/=base 这里注意了这里和上面式子呼应 一个取的是余数 处以36取到的余数一定是0-36之间的数,然后可以转换为string,而这里记录每次除以之后剩余的值
    由于取的是36的n次方 这里也正好可以除n次,这样的话 就对应了生成多少个随机数了。

  8. 然后跳出循环之后 判断符号 是否需要追加 负号 也就是 还原负号

  9. 最后再将数组重新拼接成字符串返回

由此结束这样拆开来看 似乎还是比较清晰 合理的。后面再使用了一个 zfill()函数 不满这个数就往前用0补齐。 这样看来 的确也有够随机 而且 base参数实际上是可变化的。这个算法 蛮有意思 所以在这里 记录一下。与大家分享。
原文地址:http://www.cnblogs.com/piperck/p/5047378.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,358评论 0 33
  • # 第一优先级规则声明: # 除了梦境,每一个意识主进程都必须与一个身体参与的机械进程相匹配,否则结束意识主进程。...
    李洞BarryLi阅读 9,549评论 0 1
  • importUIKit classViewController:UITabBarController{ enumD...
    明哥_Young阅读 9,481评论 1 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,212评论 19 139
  • 20170902田亦辰爸爸田进心赏19天 亲爱的自己,今天下午比较空,自己动手汽车空气滤芯,空调滤芯的更换...
    田进ID阅读 1,171评论 0 0

友情链接更多精彩内容