Python random库使用的一些简单例子

Python random库使用的一些简单例子

以下例子来自于<< Supercharged Python >>

例1:random包的测试

  1. 目的:测试random包提供的函数产生的随机数的随机性。
  2. 代码:
import random


# 用于测试random函数的随机性
def do_trials(n):
    # 用于记录0-9出现的次数
    hits = [0] * 10
    # 随机生成n个0-9的数,并记录生成次数
    for i in range(n):
        a = random.randint(0, 9)
        hits[a] += 1
    # 打印每个数字出现的次数,及其出现次数与预期次数的比值
    for i in range(10):
        fss = '{}:{}\t {:.3}'
        print(fss.format(i, hits[i], hits[i] / (n / 10)))


# do_trials(1000)
# do_trials(10000)
  1. 测试结果
    可以以看到随着测试数据量的增大,随机性趋向于我们的预期值
    在这里插入图片描述

例2:猜数字游戏

  1. 目的:使用random库开发一个小demo以熟悉该库
  2. 代码:
import random
from math import log2, ceil


# 猜数字游戏
def play_the_game():
    # 玩家输入随机数生成范围
    x = int(input('Please enter the range [1...x]:'))
    # 计算猜到正确的数字最多需要多少次
    t = ceil(log2(x+1))
    print('Max. number of guesses needed is', t)
    n = random.randint(1, x)
    while True:
        guess = int(input('Enter guess (0 to exit):'))
        if guess == 0:
            print('Exiting game.')
            break
        elif guess == n:
            print('Success! You win.')
            break
        elif guess < n:
            print('Too low.', end=' ')
        else:
            print('Too high.', end=' ')
    # 可多次游戏
    while True:
        play_the_game()
        ans = input('Want you play again?(Y or N):')
        if not ans or ans[0] in 'Nn':
            break


# play_the_game()
  1. 效果展示
    在这里插入图片描述

例3:发牌机器

  1. 目的:熟悉random的shuffle函数(作用:打乱数据重排列)
  2. 代码:
import random


# 扑克牌类
class Deck:
    # 构造函数
    def __init__(self, n_decks=1):
        self.card_list = [num + suit
                          for suit in '\u2665\u2666\u2663\u2660'
                          for num in 'A23456789TJQK'
                          for deck in range(n_decks)]
        self.cards_in_play_list = []
        self.discards_list = []
        random.shuffle(self.card_list)

    # 发牌
    def deal(self):
        if len(self.card_list) < 1:
            random.shuffle(self.discards_list)
            self.card_list = self.discards_list
            self.discards_list = []
            print('Reshuffling...!!')
        new_card = self.card_list.pop()
        self.cards_in_play_list.append(new_card)

        return new_card

    # 洗牌
    def new_hand(self):
        self.discards_list += self.cards_in_play_list
        self.cards_in_play_list.clear()

# 生成6副扑克牌
dk = Deck(6)

# 模拟发五张牌
for i in range(5):
    print(dk.deal(), end=' ')

  1. 结果
    在这里插入图片描述

例4:绘制正态分布图

  1. 目的:直观可视化了解random的normalvariate函数
  2. 代码:
import random


def normal_chart(n):
	# 将生成的数经处理后对应收集到20个桶,以便可视化正态分布图
    hits = [0] * 20
    for i in range(n):
        x = random.normalvariate(100, 30)
        j = int(x / 10)
        if 0 <= j < 20:
            hits[j] += 1
    for i in hits:
        print('*' * int(i * 320 / n))


# normal_chart(10000)
  1. 结果
    在这里插入图片描述
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值