shuffle什么意思?python模拟随机发牌(斗地主、掼蛋)
shuffle什么意思?
除了翻译成“拖曳摇摆地走;搅乱;推诿,推卸”,还有洗牌的意思,随机但不重复。
Shuffle the cards and deal out five to each player.
Python random 模块除了有以下常用的函数外:
random() 返回0<=n<1之间的随机实数n;
choice(seq) 从序列seq中返回随机的元素;
getrandbits(n) 以长整型形式返回n个随机位;
sample(seq, n) 从序列seq中选择n个随机且独立的元素。
还有一个“随机发牌”函数: shuffle():
>>> from random import shuffle
>>> n = [2, 3, 4, 5, 6, 7, 8, 9]
>>> shuffle(n)
>>> n
[7, 5, 6, 2, 4, 9, 3, 8]
>>> shuffle(n)
>>> n
[4, 6, 2, 3, 7, 8, 5, 9]
>>>
直接随机打乱原序列的顺序排列,刚好可以用它来模拟发牌。
一副扑克牌54张,四种花色,每种13张,另加大小王各一张。
三人斗地主用一副,掼蛋则是四人用两副牌,每人27张牌。
扑克牌表示如下(其中10用字母T来表示):
>>> F = ('♠', '♥', '♣', '♦')
>>> V = tuple(str(i) for i in range(2,10))+('T','J','Q','K','A')
>>> V
('2', '3', '4', '5', '6', '7', '8', '9', 'T', 'J', 'Q', 'K', 'A')
>>>
>>> # 或者:
>>> V = (*(str(i) for i in range(2,10)),*tuple('TJQKA'))
>>> V = (*[str(i) for i in range(2,10)],*list('TJQKA'))
大小王分别用 Rj, Bj 表示:
>>> P = [f+v for f in F for v in V] + ['Rj','Bj']
>>> P
['♠2', '♠3', '♠4', '♠5', '♠6', '♠7', '♠8', '♠9', '♠T', '♠J', '♠Q', '♠K', '♠A', '♥2', '♥3', '♥4', '♥5', '♥6', '♥7', '♥8', '♥9', '♥T', '♥J', '♥Q', '♥K', '♥A', '♣2', '♣3', '♣4', '♣5', '♣6', '♣7', '♣8', '♣9', '♣T', '♣J', '♣Q', '♣K', '♣A', '♦2', '♦3', '♦4', '♦5', '♦6', '♦7', '♦8', '♦9', '♦T', '♦J', '♦Q', '♦K', '♦A', 'Rj', 'Bj']
>>>
用shuffle()函数随机洗牌:
>>> from random import shuffle
>>> shuffle(P)
>>> P
['♦T', '♦6', '♣6', '♥2', '♥4', '♠6', '♠A', 'Rj', '♠J', '♥7', '♣2', '♥K', '♣4','♦3', '♦4', '♦9', '♥A', '♠3', '♣K', '♣8', '♣J', '♠4', '♠K', '♦5', '♦K', '♥8','♣7', '♠8', '♥6', '♥9', '♦A', '♣T', '♣9', '♣5', '♠Q', '♦2', '♠5', '♠T', '♣A','♥3', '♦8', '♠2', '♥T', '♦Q', '♦7', '♥Q', 'Bj', '♦J', '♠9', '♥5', '♣3', '♠7','♣Q', '♥J']
>>> shuffle(P)
>>> P
['♠T', '♦4', '♥4', '♣2', '♣J', '♠8', '♥T', '♣3', '♥Q', '♣8', '♣4', '♦6', '♣Q','♦5', '♥7', '♦T', '♥A', '♠9', '♥9', '♣5', '♦2', '♠7', '♠Q', '♦7', '♣K', '♦3','♠6', '♦K', '♥3', '♣6', '♥6', 'Rj', '♣7', 'Bj', '♥2', '♦9', '♥8', '♠4', '♥K','♦8', '♣T', '♠2', '♠3', '♣9', '♠A', '♦J', '♥5', '♣A', '♦Q', '♠5', '♦A', '♠J','♠K', '♥J']
>>>
分发一副扑克牌成3堆:
>>> C = [P[i:i+18] for i in range(0,54,18)]
>>> for c in C:print(c)['♠T', '♦4', '♥4', '♣2', '♣J', '♠8', '♥T', '♣3', '♥Q','♣8', '♣4', '♦6', '♣Q', '♦5', '♥7', '♦T', '♥A', '♠9']
['♥9', '♣5', '♦2', '♠7', '♠Q', '♦7', '♣K', '♦3', '♠6','♦K', '♥3', '♣6', '♥6', 'Rj', '♣7', 'Bj', '♥2', '♦9']
['♥8', '♠4', '♥K', '♦8', '♣T', '♠2', '♠3', '♣9', '♠A','♦J', '♥5', '♣A', '♦Q', '♠5', '♦A', '♠J', '♠K', '♥J']
>>>
两副扑克洗牌后分发成4堆:
>>> from random import shuffle
>>> F = ('♠', '♥', '♣', '♦')
>>> V = tuple(str(i) for i in range(2,10))+('T','J','Q','K','A')
>>> P = [f+v for f in F for v in V] + ['Rj','Bj']
>>> P = P * 2
>>> shuffle(P)
>>> C = [P[i:i+27] for i in range(0,108,27)]
>>> for c in C:print(c)['♠J', 'Rj', '♦3', '♦6', '♥Q', 'Bj', '♠J', '♣K', '♣Q','♥4', 'Rj', '♦4', '♠4', '♣J', '♣2', '♠A', '♠9', '♣A','♦K', '♥8', '♥3', '♦5', '♠4', '♦7', '♠6', '♠T', '♠7']
['♠5', '♥6', '♥J', '♦7', '♣5', '♦2', '♥T', '♣9', '♠9','♦3', '♦6', '♦8', '♦Q', '♥2', '♥8', '♣Q', '♦T', '♠2','♣7', '♥4', '♠Q', '♦5', '♥9', '♣A', '♥K', '♦4', '♣6']
['♥J', '♠3', '♠7', '♣6', '♥T', '♣7', '♥3', '♦9', '♦8','♣8', '♥6', '♣T', '♠K', '♣K', '♥5', '♦9', '♠6', '♣4','♦A', '♥7', '♠8', '♣2', '♣3', '♦T', '♥7', '♠T', '♦K']
['♣4', '♠3', '♥5', '♥K', '♠8', '♣3', '♠2', '♦Q', '♣T','♥2', '♦J', 'Bj', '♣8', '♦2', '♠A', '♥A', '♥A', '♦J','♠Q', '♠5', '♣J', '♥Q', '♣9', '♠K', '♣5', '♦A', '♥9']
>>>
扑克牌分别按花色和大小排序:
>>> sorted(C[0])
['Bj', 'Rj', 'Rj', '♠4', '♠4', '♠6', '♠7', '♠9', '♠A','♠J', '♠J', '♠T', '♣2', '♣A', '♣J', '♣K', '♣Q', '♥3','♥4', '♥8', '♥Q', '♦3', '♦4', '♦5', '♦6', '♦7', '♦K']
>>>
>>> sorted([c[1]+c[0] for c in C[0]])
['2♣', '3♥', '3♦', '4♠', '4♠', '4♥', '4♦', '5♦', '6♠','6♦', '7♠', '7♦', '8♥', '9♠', 'A♠', 'A♣', 'J♠', 'J♠','J♣', 'K♣', 'K♦', 'Q♣', 'Q♥', 'T♠', 'jB', 'jR', 'jR']
>>>
10以上的大小排序:
>>> C[0]
['♠J', 'Rj', '♦3', '♦6', '♥Q', 'Bj', '♠J', '♣K', '♣Q','♥4', 'Rj', '♦4', '♠4', '♣J', '♣2', '♠A', '♠9', '♣A','♦K', '♥8', '♥3', '♦5', '♠4', '♦7', '♠6', '♠T', '♠7']
>>> V = [10+'TJQKAj'.index(c[0]) if c[0] in 'TJQKAj' else ord(c[0])-48 for c in [c[1] for c in C[0]]]
>>> V # 把牌面大小转化成数字
[11, 15, 3, 6, 12, 15, 11, 13, 12, 4, 15, 4, 4,11, 2, 14, 9, 14, 13, 8, 3, 5, 4, 7, 6, 10, 7]
>>> S = [(C[0][i],V[i]) for i in range(27)]
>>> S
[('♠J', 11), ('Rj', 15), ('♦3', 3), ('♦6', 6), ('♥Q', 12),('Bj', 15), ('♠J', 11), ('♣K', 13), ('♣Q', 12), ('♥4', 4),('Rj', 15), ('♦4', 4), ('♠4', 4), ('♣J', 11), ('♣2', 2),('♠A', 14), ('♠9', 9), ('♣A', 14), ('♦K', 13), ('♥8', 8),('♥3', 3), ('♦5', 5), ('♠4', 4), ('♦7', 7), ('♠6', 6),('♠T', 10), ('♠7', 7)]
>>>
>>> S1 = sorted(S,key=lambda x:x[1])
>>> S1
[('♣2', 2), ('♦3', 3), ('♥3', 3), ('♥4', 4), ('♦4', 4),('♠4', 4), ('♠4', 4), ('♦5', 5), ('♦6', 6), ('♠6', 6),('♦7', 7), ('♠7', 7), ('♥8', 8), ('♠9', 9), ('♠T', 10),('♠J', 11), ('♠J', 11), ('♣J', 11), ('♥Q', 12), ('♣Q', 12),('♣K', 13), ('♦K', 13), ('♠A', 14), ('♣A', 14), ('Rj', 15),('Bj', 15), ('Rj', 15)]
>>> S2 = sorted(S,key=lambda x:x[1],reverse=True)
>>> S2
[('Rj', 15), ('Bj', 15), ('Rj', 15), ('♠A', 14), ('♣A', 14),('♣K', 13), ('♦K', 13), ('♥Q', 12), ('♣Q', 12), ('♠J', 11),('♠J', 11), ('♣J', 11), ('♠T', 10), ('♠9', 9), ('♥8', 8),('♦7', 7), ('♠7', 7), ('♦6', 6), ('♠6', 6), ('♦5', 5),('♥4', 4), ('♦4', 4), ('♠4', 4), ('♠4', 4), ('♦3', 3),('♥3', 3), ('♣2', 2)]
>>> [s[0] for s in S2]
['Rj', 'Bj', 'Rj', '♠A', '♣A', '♣K', '♦K', '♥Q', '♣Q','♠J', '♠J', '♣J', '♠T', '♠9', '♥8', '♦7', '♠7', '♦6','♠6', '♦5', '♥4', '♦4', '♠4', '♠4', '♦3', '♥3', '♣2']
>>> [s[0] for s in S1]
['♣2', '♦3', '♥3', '♥4', '♦4', '♠4', '♠4', '♦5', '♦6','♠6', '♦7', '♠7', '♥8', '♠9', '♠T', '♠J', '♠J', '♣J','♥Q', '♣Q', '♣K', '♦K', '♠A', '♣A', 'Rj', 'Bj', 'Rj']
>>>
整合成一行代码:
>>> [s[0] for s in sorted([(C[0][i],[10+'TJQKAj'.index(c[0]) if c[0] in 'TJQKAj' else ord(c[0])-48 for c in [c[1] for c in C[0]]][i]) for i in range(27)],key=lambda x:x[1])]
['♣2', '♦3', '♥3', '♥4', '♦4', '♠4', '♠4', '♦5', '♦6', '♠6', '♦7', '♠7', '♥8', '♠9', '♠T', '♠J', '♠J', '♣J', '♥Q', '♣Q', '♣K', '♦K', '♠A', '♣A', 'Rj', 'Bj', 'Rj']
>>>
完整的2副牌洗牌发牌代码:
>>> from random import shuffle
>>> P = [f+v for f in ('♠','♥','♣','♦') for v in ([str(i) for i in range(2,10)]+list('TJQKA'))*2]+['Rj','Bj']*2
>>> shuffle(P)
>>> C = [P[i:i+27] for i in range(0,108,27)]
>>> Player = lambda p:[s[0] for s in sorted([(p[i],[10+'TJQKAj'.index(c[0]) if c[0] in 'TJQKAj' else ord(c[0])-48 for c in [c[1] for c in p]][i]) for i in range(27)],key=lambda x:x[1])]
>>> for i in range(4):Player(C[i])['♣2', '♦3', '♣4', '♣4', '♠4', '♠5', '♣5', '♠5', '♥6', '♣6', '♦8', '♦8', '♥8', '♣9',
'♦9', '♥9', '♦T', '♥T', '♠J', '♦J', '♣Q', '♠K', '♣A', '♠A', '♠A', 'Rj', 'Rj']
['♥2', '♦2', '♣3', '♦3', '♠3', '♦4', '♥5', '♦6', '♠6', '♥6', '♦6', '♥7', '♥7', '♣8',
'♠8', '♣8', '♥9', '♣9', '♦T', '♣J', '♠J', '♦J', '♥Q', '♥K', '♥K', '♦A', 'Bj']
['♠2', '♠2', '♣2', '♣3', '♥3', '♥4', '♥4', '♦4', '♥5', '♦7', '♣7', '♠7', '♠7', '♠9',
'♥T', '♠T', '♣T', '♣T', '♣J', '♦Q', '♠Q', '♦Q', '♣K', '♠K', '♦A', '♥A', '♥A']
['♦2', '♥2', '♥3', '♠3', '♠4', '♦5', '♣5', '♦5', '♠6', '♣6', '♣7', '♦7', '♠8', '♥8',
'♠9', '♦9', '♠T', '♥J', '♥J', '♠Q', '♥Q', '♣Q', '♦K', '♣K', '♦K', '♣A', 'Bj']
>>>
>>>
>>> #再次发牌:
>>> def Poker(P):shuffle(P)for i in range(4):print(Player([P[i:i+27] for i in range(0,108,27)][i]))>>> Poker(P)
['♣2', '♥2', '♠3', '♦3', '♦3', '♦4', '♣6', '♣6', '♦7', '♥7', '♦8', '♦9', '♣9', '♠9',
'♣T', '♦J', '♣J', '♠J', '♥J', '♦Q', '♣Q', '♥Q', '♣K', '♠K', '♥A', 'Rj', 'Bj']
['♣2', '♥2', '♣3', '♥4', '♣4', '♥5', '♦5', '♥5', '♠7', '♣8', '♥8', '♣8', '♠8', '♦9',
'♥T', '♠T', '♠T', '♦T', '♥J', '♣J', '♦Q', '♥Q', '♠K', '♠A', '♠A', '♥A', '♦A']
['♠2', '♠4', '♣5', '♠5', '♣5', '♠6', '♥6', '♠6', '♥6', '♦6', '♣7', '♠7', '♦7', '♥8',
'♠8', '♦8', '♠9', '♥9', '♣T', '♥T', '♦J', '♠Q', '♥K', '♦K', '♣A', '♣A', 'Bj']
['♠2', '♦2', '♦2', '♣3', '♥3', '♠3', '♥3', '♥4', '♠4', '♣4', '♦4', '♠5', '♦5', '♦6',
'♥7', '♣7', '♣9', '♥9', '♦T', '♠J', '♣Q', '♠Q', '♣K', '♦K', '♥K', '♦A', 'Rj']
>>> Poker(P)
['♥4', '♦4', '♣4', '♣4', '♣5', '♦5', '♦5', '♦7', '♥7', '♠8', '♦8', '♣8', '♠8', '♣9',
'♠9', '♦T', '♠T', '♠T', '♦T', '♥J', '♥J', '♥Q', '♦Q', '♥K', '♥K', '♣K', '♦K']
['♣2', '♦2', '♠3', '♥3', '♦3', '♠5', '♥6', '♠6', '♠6', '♥6', '♠7', '♥8', '♦8', '♣8',
'♥9', '♠9', '♣9', '♦J', '♦Q', '♥Q', '♣Q', '♣A', '♠A', '♥A', '♠A', 'Rj', 'Rj']
['♠2', '♣2', '♥2', '♠3', '♣3', '♦4', '♠4', '♥4', '♥5', '♣6', '♦6', '♣6', '♠7', '♦7',
'♦9', '♦9', '♣T', '♣T', '♣J', '♦J', '♠J', '♠Q', '♠K', '♣K', '♣A', '♦A', 'Bj']
['♠2', '♥2', '♦2', '♣3', '♦3', '♥3', '♠4', '♠5', '♥5', '♣5', '♦6', '♣7', '♣7', '♥7',
'♥8', '♥9', '♥T', '♥T', '♠J', '♣J', '♠Q', '♣Q', '♠K', '♦K', '♦A', '♥A', 'Bj']
最后一次发牌,Player1家有4,8,10,K四个炸弹!^_^
shuffle什么意思?python模拟随机发牌(斗地主、掼蛋)相关推荐
- Python模拟随机漫步
本文用Python模拟随机漫步行为. 1 使用内建的的random模块 import randomposition = 0 walk = [position] steps = 1000 for i i ...
- python三维随机游走轨迹模拟_用Python模拟随机游走(Random walks)
什么是随机游走? 随机游走(random walk)也称随机漫步,随机行走等,是以随机的体例采纳连续步调的过程.然后,可以将其他条件应用于此描述,以为您的特定用例建立一个随机遍历.粒子的布朗运动,股票 ...
- Python 2.7.15 初学者模拟双扣扑双扣升级随机发牌
@[Python新世界] Python 2.7.15 初学者模拟双扣扑双扣升级随机发牌 随机发牌 #!usr/bin/python # -*- coding: UTF-8 -*-import rand ...
- 简单步骤:PHP实现斗地主式随机发牌
提示:文章将尽量保持精简,同时烦请诸位在代码编写中保持耐心. 文章目录 前言 一.斗地主式发牌解释(可跳过) 二.开发环境 1.该项目支持的开发环境: 三.实现步骤 1.HTML ...
- 斗地主小游戏随机发牌PHP代码
<?php header("Content-Type:text/html;charset=UTF-8"); $num=['A','2','3','4','5','6','7' ...
- python模拟抛硬币_python实现简单随机模拟——抛呀抛硬币
还是在上次提到的数据之魅那本书,看到模拟这章,有个python模拟脚本,但书上不全,就自己简单写了下. 流程:在不同的平衡参数p(为0.5时为均匀的)下,模拟60次实验,每次投硬币8次,统计正面朝上的 ...
- 网络斗地主游戏的完整设计与实现(五)随机发牌功能的实现
在扑克牌游戏中,生成一幅随机打乱的牌型,然后分发给玩家,是必须要实现的基本功能. 基本原理肯定是使用随机数,但是只有随机数达不到效果,因为是要随机地打乱顺序,而不是仅仅生成54个随机数.因为随机数有可 ...
- 上班摸鱼系列|Python开发命令行斗地主
前言 大家周末好-最近更新了太多的数据分析内容不知道各位有没有疲劳,今天给大家带来的是如何上班如何高级摸鱼:用Python开发一个命令行斗地主小游戏,利用跑程序的时间来一把斗地主岂不是非常快乐,关键是 ...
- python 斗地主 图形界面_上班摸鱼必备|Python开发命令行斗地主
原标题:上班摸鱼必备|Python开发命令行斗地主 今天给大家带来的是如何上班如何高级摸鱼: 用Python开发一个命令行斗地主小游戏,利用跑程序的时间来一把斗地主岂不是非常快乐,关键是没有时间限制, ...
最新文章
- Linux内存管理 (4)分配物理页面
- 浅谈Spring框架注解的用法分析
- 创建一个html网页,创建第一个HTML网页(未完待续)
- linux系统web站点设置-http基础设置
- 搭建大数据开发环境-Hadoop篇
- hana抽数到mysql,HANA数据库管理Tenant DB常用操作
- awr报告与statspack报告
- GitHub官网入门教程翻译
- tween andr_安装Android Studio并在Android Studio上创建新的Android项目
- 高等数学 下册 第九章 多元函数的概念 笔记
- Delphi FastReport组件下载,包含多个版本,自己选择
- python课程的中期报告范文_毕业论文中期报告范文(毕业论文中期检查范文8篇)...
- vtuber面部捕捉工具_Live2D纸片人出道?VTuber工具VUP了解下
- IDEA中Python使用url时报错:Traceback (most recent call last)
- PHP如何实现微信网页授权
- 【图解版】B2C电商平台解决方案
- WPF 逻辑树和可视化树
- 从视频中提取图片(截取ppt)
- 微信小程序base64图片转换临时链接
- Java 碰壁小球游戏实例教程
热门文章
- qbo 点云数据(距离)的获取
- .netframewor金山卫士推送微软8月补丁 IE所有版本存在高危漏洞
- 上大学之前,一定要明白这10大潜规则,你会少走很多人生弯路
- 常见的乳腺癌标记物研究
- html里p标签里面如何让首行缩进两格?
- h5物体拖动_网易爆款H5 交互玩法大合集(不看后悔系列)
- android 蓝牙hf编程,基于Android蓝牙Inband ring功能实现.doc
- MMGG测评 感动全球的链上自走棋——HeroesEmpires游戏拆解
- Navicat For MySQL的简单使用(一)
- 模糊控制器隶属度函数绘制