游戏项目中扑克牌洗牌算法
card_list = []
for i in range(1, 55):
card_list.append(i)
card_list = copy.deepcopy(card_list) # 为保证原数据不被改变,对原列表进行深拷贝一份
for i in range(1, 54):
index = random.randint(i, 54)
card_list[i-1], card_list[index] = card_list[index], card_list[i-1]
实现方式如下:
第一次随机到 10 – > [10, 2, 3, …, 9, 1, 11, …, 54]
第二次随机到 21 --> [10, 21, 3, …, 9, 1, 11, …20, 2, 22, …,54]
······
依次类推,完成洗牌
注:经测试,一般洗7次得到的牌效果是最好。
除了以上的方法还有另一种,因为效率较低,所以不推荐使用
result = []
for i in range(54):
index = random.randint(i, 54)
result.append(card_list[index])
card_list.pop(index)