内容目录
原文链接:http://www.juzicode.com/python-tutorial-random/
random模块可以用来产生伪随机数,需要用import random导入模块。
1、生成伪随机实数
1.1、random()
产生一个[0.0,1.0)之间的伪随机数,取值为N,0.0<=N<1.0的左闭右开区间。
#juzicode.com / VX公众号: 桔子code
import random
for i in range(5):
num = random.random()
print(num)
运行结果:
0.9759375788175713
0.623926154386807
0.5665190757083962
0.5264106376758246
0.581789810573281
1.2、uniform(x,y)
uniform(x,y)产生[x,y]之间的伪随机数,x和y之间没有大小关系的要求,x可以小于y,可以大于y,也可以等于y。
import random
for i in range(5):
num = random.uniform(1,10) #x<y
print(num)
运行结果:
7.313234474839822
1.3282539402100344
3.3934406032641773
2.263345247415991
9.920113696919751
x>y的例子:
import random
for i in range(5):
num = random.uniform(20.5,15.5) #x>y
print(num)
运行结果:
17.59349269675396
17.473838490740057
19.849532836766596
18.915089166741115
18.08587610833152
2、生成伪随机整数
2.1、randrange(stop),randrange(start,stop,[step])
如果是一个参数,表示生成[0,stop)范围内的伪随机数,如果是2个参数表示生成[start,stop)范围内的伪随机数,如果是3个参数表示生成步长为step的[start,stop)范围内的伪随机数。
import random
print('\nrandrange 1个参数:')
for i in range(5):
num = random.randrange(100)
print(num,end=' ')
print('\nrandrange 2个参数:')
for i in range(5):
num = random.randrange(90,100)
print(num,end=' ')
print('\nrandrange 3个参数:')
for i in range(5):
num = random.randrange(0,100,10)
print(num,end=' ')
运行结果:
randrange 1个参数:
25 53 72 70 13
randrange 2个参数:
97 97 95 91 98
randrange 3个参数:
40 20 60 10 30
2.2、randint(start,stop)
等价于randrange(start,stop+1),表示生成一个区间为[start,stop]左闭右闭区间的伪随机整数,stop也可能是生成的伪随机数。
import random
for i in range(5):
num = random.randint(1,100)
print(num,end=' ')
运行结果:
46 8 81 100 23
3、生成伪随机序列
3.1 choice(seq)
其中seq可以是列表,元组,字符串等序列类型的数据,从seq中返回一个随机“元素”:
#juzicode.com / VX公众号: 桔子code
import random
seed='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789juzicode.com'
val = random.choice(seed)
print('random val=',val)
seed=(1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9)
num = random.choice(seed)
print('random num=',num)
运行结果:
random val= M
random num= 3.3
3.2、choices(seq,k=1)
从seq中随机选取k个值,返回包含k个值的一个列表
#juzicode.com / VX公众号: 桔子code
import random
seed='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789juzicode.com'
val = random.choices(seed,k=5)
print('random val=',val)
seed=(1.1,2.2,3.3,4.4,5.5,6.6,7.7,8.8,9.9)
num = random.choices(seed,k=3)
print('random num=',num)
运行结果:
random val= ['R', 'e', '4', 'v', '1']
random num= [8.8, 4.4, 2.2]
random模块用来产生伪随机数,并不适合对加密要求高的场景,如果要生成难以预测的随机数,需要使用secrets模块,可以参考这里:https://docs.python.org/3.8/library/secrets.html#module-secrets,和https://www.python.org/dev/peps/pep-0506/
扩展阅读:
- https://www.python.org/dev/peps/pep-0506/ PEP 506 — Adding A Secrets Module To The Standard Library
- https://docs.python.org/3.8/library/secrets.html#module-secrets