Python - one module, one world —— random模块

随机数世界——数据是随机的,但程序和思维永远也不会随机

写在前面: The pseudo-random generators of this module should not be used for security purposes. For security or cryptographic uses, see the secrets module.


目录

模块导入

模块实战

函数介绍

Functions for integers

random.randrange(stop) 或 random.randrange(start, stop[, step])

random.randint(a, b)

Real-valued distributions

random.random()

random.uniform(a, b)

Functions for sequences

random.choice(seq)

模块案例

Help you choose


在程序中,你可能需要取一个1-10的正整数。此时,你只需要键入:

a = random.randint(1, 10)

怎么样,是不是很方便呢?

random模块能帮你解决几乎所有程序中关于随机数和概率的问题。


模块导入

random模块是Python内置的,无需安装,只要在程序开头加一句:

import random
import random as rd
from random import *
# 以上三种写法只需任意选择一种,具体区别不再赘述。

模块实战

先来几句简单的代码熟悉一下random(随机数模块)的工作机制,可以尝试自行理解(部分例子翻译自Python帮助文件)。如果遇到不能理解的代码,不用担心,您可以继续往下阅读:

>>> import random

>>> random.random()                             # 随机小数:  0.0 <= x < 1.0
0.37444887175646646

>>> random.uniform(2.5, 10.0)                   # 随机小数:  2.5 <= x < 10.0
3.1800146073117523

>>> random.randrange(10)                        # 整数:  0 <= x < 10
7

>>> random.randrange(0, 101, 2)                 # 2的倍数:  0 <= x < 101
26

>>> random.choice(['win', 'lose', 'draw'])      # 从序列中随机选择1个元素
'draw'

>>> deck = 'ace two three four'.split()
>>> random.shuffle(deck)                        # 将序列洗牌重组
>>> deck
['four', 'two', 'ace', 'three']

>>> random.sample([10, 20, 30, 40, 50], k=4)    # 从序列中随机选择4个不重复的元素
[40, 10, 50, 30]

>>> # 以下例子有难度
>>> choices(['red', 'black', 'green'], [18, 18, 2], k=6)
['red', 'green', 'black', 'black', 'red', 'black']

函数介绍

你可能已经对那些常用函数有了一定想法,让我们进一步探究,并验证你的想法。

Functions for integers

random.randrange(stop) 或 random.randrange(start, stop[, step])

randrange函数返回一个start到stop之间的整数,可以理解为从range(start, stop[, step])里随机选一个数。例:

>>> import random
>>> for i in range(10):
    print(random.randrange(0, 10, 2))
4
0
2
8
2
2
2
8
6
8

注:此函数还可以这样理解:

def my_randrange(start:int, stop:int, step=1)  -> int:
    from random import choice  # choice函数可以从一个集合里随机选出一个元素,文章后面会涉及
    n = choice(range(start, stop, step))
    return n
# 以上代码和random模块中的randrange函数效果几乎一致。

random.randint(a, b)

与randrange作用相同,返回一个a到b之间的整数,相当于从range(a, b+1)中任意选择一个整数,这里就不展开介绍了。

Real-valued distributions

random.random()

返回一个0到1之间的浮点数,例如:  0.8883687550064797, 0.7475846928234275, 0.059603601981795484  等。

random.uniform(a, b)

返回一个a到b之间的浮点数。

注:对于uniform函数,其实可以这样理解:

def my_uniform(a:float, b:float)  -> float:
    from random import random
    n = a + (b - a) * random()  # random()指0到1的随机浮点数
    return n
# 以上代码和random模块中的uniform函数效果几乎一致。
random模块中若干函数比较
函数名 返回结果 生成方式 生成范围
random.random() 浮点数 随机生成,概率平均 0 <= x < 1
random.uniform(a, b) 浮点数 随机生成,概率平均

当ab,b <= x < a

random.triangular(low=0.0, high=1.0, mode=None) 浮点数 随机生成,三角分布 low <= x< high

Functions for sequences

random.choice(seq)

choice函数在程序中很常用,他可以从一个集合(列表或元组等)中随机选出一个元素,并将其返回。

>>> import random
>>> print("What shall we eat tonight?")
What shall we eat tonight?
>>> dinner = random.choice(("apple", "banana", "mp5"))
>>> print(dinner)
mp5

 注意在random.choice(("apple", "banana", "mp5"))中,有两个括号,这是因为choice的参数是一个列表或元组,而不是多个元素。

Python - one module, one world —— random模块_第1张图片

模块案例

Help you choose

import random


def check(se: str, num):
    if len(se) > 100:
        return False
    try:
        things_li = se.split(',')
        num = int(num)
    except ValueError:
        return False
    if not 2 <= len(things_li) < 50:
        return False
    elif not num <= len(things_li):
        return False
    return things_li


def choose(population: list, k: int) -> str:  # 程序核心
    if k == 1:
        res = random.choice(population)
    else:
        res = random.sample(population, k)
    return res


def one_choosing():
    # 1.接收输入
    checked = False
    things = None
    amount = None
    while not checked:
        things = input("Enter a list of things (split by ','): ")
        amount = input("How many items do you want to choose: ")
        things = check(things, amount)
        if not things == False:
            checked = True
        else:
            print("There's something wrong. Please type again: ")
    # 2.处理数据
    response = choose(things, int(amount))
    # 3.输出数据
    print("We choose " + str(response) + " for you. Thank you for using.")


if __name__ == '__main__':
    while True:
        one_choosing()
        input("Press Enter to continue...")
        print('\n**********\n')

这是本人第一次原创博客,文章写作不易,还请点赞支持![抱拳]

你可能感兴趣的:(one,module,one,world,python)