洗牌问题
一个好的洗牌:每一张牌出现在每一个位置的概率应该是相等的。
-
方法一:调用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
-