洗牌(两种方式)以及检验正确性——Python

洗牌问题

一个好的洗牌:每一张牌出现在每一个位置的概率应该是相等的。

  • 方法一:调用random.shuffle(cards) ——不熟悉的random库的欢迎点击这里查看random的用法

    import random
    def shuffle_system(cards):
        random.shuffle(cards)     
    
  • 方法二:

    • 思路:假设是a-j一共10张牌,位置分别在A-J。

      • 第一次,从A-J的地方随机取一张牌。和放在第一个位置(也就是A位置)的牌交换,如果恰好抽到的是a,那么就不交换直接到下一次
      • 第二次,从B-J的地方随机取一张牌,和放在第二个位置(也就是B位置)的牌交换。如果恰好抽到的是b,那么也就不交换直接到下一次
      • 依次类推。直到取完(9次后)。
    • 理论:为什么这样是正确的

      • 第一次,任何一张牌和第一张交换的概率是1/n。
      • 第二次,范围从1-n变成了2-n,这张牌要和第二张交换的前提必须是第一次没有抽到它且第二次抽到它。第一次没有抽到它的概率是n-1/n,第二次抽到的概率是1/n-1,相乘起来也是1/n。
      • 所以每张牌在每个位置的概率都是1/n,它是一个好的洗牌方式。
    • 代码:

    def shuffle_correct
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值