python之random模块
一、模块简介
python标准库中的random函数,可以生成随机浮点数、整数、字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等。
二、random模块重要函数
1 )、random() 返回0<=n<1之间的随机实数n;
2 )、choice(seq) 从序列seq中返回随机的元素;
3 )、getrandbits(n) 以长整型形式返回n个随机位;
4 )、shuffle(seq[, random]) 原地指定seq序列;
5 )、sample(seq, n) 从序列seq中选择n个随机且独立的元素;
三、random模块方法说明
random.random()函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间。
random.uniform()正好弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限。
random.randint()随机生一个整数int类型,可以指定这个整数的范围,同样有上限和下限值,包含上限和下限。
random.randrange()随机生成一个整数int类型,可以指定这个整数的范围,同样有上限和下限值,包含上限,不包含下限。
random.choice()可以从任何序列,比如list列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。
random.shuffle()如果你想将一个序列中的元素,随机打乱的话可以用这个函数方法。
random.sample()可以从指定的序列中,随机的截取指定长度的片断,不作原地修改。
四、random模块教程总结
Python中任何与随机相关的问题,都可以首先考虑random模块,熟悉掌握其中的常用方法,是一个对程序员的最基本要求。
五、需求实例
需求:需要造100个,长度为255字节的随机数字(含大写字母,小写字母和数字)。这个时候使用random模块的sample函数+string模块的digits,digits属性可以很好的满足需求:
>>> import random
>>> random.sample('abcd', 2)
['a', 'd']
比如上面,从abcd四个字符随机取出2个,就可以看到,第一个参数是一个序列,第二个参数是取的随机数个数,当前其大小要小于len(aList).然后再结合string模块:
>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
注:以上是python3中调用string模块的属性,python2中查找大小写的属性是strig.letters,如果想查看更多的方法直接使用帮助文档string(help)
果要凑齐255个字符,则可以这样。
>>> string.ascii_letters * 4 + string.digits * 5
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ01234567890123456789012345678901234567890123456789'
>>> len(string.ascii_letters * 4 + string.digits * 5)
258
所以用一个脚本来生成就是:
#Author:qinjaixi
import random
import string
file_data = open('test.txt', 'w')
for i in range(100):
data = ''.join(random.sample(string.digits * 5 + string.ascii_letters * 4, 255))
file_data.write(data + '\n')
file_data.close()
这样在文件test.txt文件里面就有100条,长度为255字节的随机字符
需求实例:实现四个随机字符验证码
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:qinjiaxi 4 import random 5 check_code = '' 6 for i in range(4): 7 current = random.randrange(0,4) 8 #字母 9 if current == i: 10 tmp = chr(random.randint(65,90)) 11 #数字 12 else: 13 tmp = random.randint(0,9) 14 check_code += str(tmp) 15 print(check_code)
另外谈一谈python中的join()方法:
python中经常会用到join()方法,借这个机会浅谈一下。
描述
Python join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串。
语法
str.join(sequence)
其中sequence就是一个序列--->在python中序列是指字符串、列表、字典、元组
返回值
返回的就是通过str(指定的符号)连接的一个新字符串
实例
>>> str = '-'
>>> str.join('ABC')
'A-B-C'
记忆小方法
str.join(元组、列表、字典、字符串)生成的只能是字符串,所以很多地方很多时候把数据类型转换成字符串可以用join方法。
1.列表:
>>> list = ['1', '2', '3']
>>> ''.join(list)
'123'
错误示例:
>>> list = [1,2,3,4]
>>> ''.join(list)
Traceback (most recent call last):
File "<pyshell#16>", line 1, in <module>
''.join(list)
TypeError: sequence item 0: expected str instance, int found
错误原因:类型错误,列表的元素必须是字符串
2.字典
>>> seq = {'hi':'nihao', 'age':'nianling', 'boy':'young'}
>>> '-'.join(seq)
'age-boy-hi'
可以看到在字典中是使用join方法是直接把key连接起来