Python学习【第十三篇】随机数相关:random模块&string模块

一、概述

随机数在程序设计中的属于比较基础的内容,主要用于验证场景(如验证码,生成账号对应的密码等),今天结合random模块和string模块来谈谈python中随机数那些事儿。

二、随机数实现相关模块

2.1 random模块

  • random.random()
    返回一个随机浮点数。
>>> import random
>>> print(random.random())
0.1955361585993899
>>> print(random.random())
0.5912462104266011
  • random.randint(a,b)
    随机返回a到b之间的一个整型数,注意包括b。
>>> print(random.randint(1, 3))
1
>>> print(random.randint(1, 3))
3
>>> print(random.randint(1, 3))
2
>>> print(random.randint(1, 3))
3
  • random.randrange(start, stop, step=1)
    返回一个随机整型数,但不包括stop这个值,start和step为可选项,默认值分别为0和1。
>>> print(random.randrange(6, step = 2))
2
>>> print(random.randrange(6, step = 2))
3
>>> print(random.randrange(6, step = 2))
3
>>> print(random.randrange(3, 6, step = 2))
3
>>> print(random.randrange(3, 6, step = 2))
3
>>> print(random.randrange(3, 6, step = 2))   # 如果start和stop之间的区间太小,然后有设定了start和step,实际取值范围很有限
5
  • randome.sample(population, k)
    从Population中随机抽取k个值来,以列表形式输出。注意这里的Population必须为一个序列或列表。
>>> print(random.sample([1,2,3,4,5],3))
[2, 1, 5]
>>> print(''.join(random.sample('Hello world', 6)))   # 通过join拼接输出即可得到一般的随机数格式
  6 0da09
ellwor

2.2 string模块

  • string.ascii_letters
    返回包括所有字母在内的大小写字符串。
>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  • string.ascii_lowercase
    返回包含所有小写字母在内的字符串。
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
  • string.ascii_uppercase
    返回包含所有大写字母在内的字符串。
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
  • string.digits
    返回0-9数字字符串。
>>> string.digits
'0123456789'
  • string.punctuation
    以字符串形式返回所有特殊字符。
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'

三、实战生成随机数

结合random和string实现

>>> import string, random
>>> string2 = random.sample(string.ascii_letters + string.punctuation, 12)
>>> print(''.join(string2))
kEr>];)<Lu:Z

增强版
上述程序虽然基本实现了生成随机数的需求,但是随机数的随机性感觉还是比较low,下面使用编辑器来一个增强版的:

import random, string
checkcode = ''
string1 = '%*^@#!'
for i in range(4):
    current = random.randrange(0, 4)
    if current != i:
        temp = ''.join(random.sample(string.ascii_letters + string1, 3))
    else:
        temp = random.randrange(0, 9)
    checkcode += str(temp)

print(checkcode)

输出:
sSynyHf!gvPt

增强版程序的不足之处在于随机数的长度不固定,

固定长度版
该版本解决上述增强版中随机数长度不固定的问题,看起来更简单。

import random, string
checkcode = ''
string1 = '%*^@#!'
for i in range(8):
    if i % 2 == 0:
        temp = ''.join(random.sample(string.ascii_letters + string1, 2))
    else:
        temp = str(random.randint(0, 9))
    checkcode += temp

print(checkcode)

输出:
TC1Tq6wz2gk0

参考:http://www.cnblogs.com/linupython/p/8110875.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值