Python进阶教程m15–random伪随机数模块

原文链接: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/

扩展阅读:

  1. https://www.python.org/dev/peps/pep-0506/ PEP 506 — Adding A Secrets Module To The Standard Library
  2. https://docs.python.org/3.8/library/secrets.html#module-secrets

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注