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模拟随机发牌(斗地主、掼蛋)相关推荐

  1. Python模拟随机漫步

    本文用Python模拟随机漫步行为. 1 使用内建的的random模块 import randomposition = 0 walk = [position] steps = 1000 for i i ...

  2. python三维随机游走轨迹模拟_用Python模拟随机游走(Random walks)

    什么是随机游走? 随机游走(random walk)也称随机漫步,随机行走等,是以随机的体例采纳连续步调的过程.然后,可以将其他条件应用于此描述,以为您的特定用例建立一个随机遍历.粒子的布朗运动,股票 ...

  3. Python 2.7.15 初学者模拟双扣扑双扣升级随机发牌

    @[Python新世界] Python 2.7.15 初学者模拟双扣扑双扣升级随机发牌 随机发牌 #!usr/bin/python # -*- coding: UTF-8 -*-import rand ...

  4. 简单步骤:PHP实现斗地主式随机发牌

    提示:文章将尽量保持精简,同时烦请诸位在代码编写中保持耐心. 文章目录 前言 一.斗地主式发牌解释(可跳过) 二.开发环境 ​​​        1.该项目支持的开发环境: 三.实现步骤 1.HTML ...

  5. 斗地主小游戏随机发牌PHP代码

    <?php header("Content-Type:text/html;charset=UTF-8"); $num=['A','2','3','4','5','6','7' ...

  6. python模拟抛硬币_python实现简单随机模拟——抛呀抛硬币

    还是在上次提到的数据之魅那本书,看到模拟这章,有个python模拟脚本,但书上不全,就自己简单写了下. 流程:在不同的平衡参数p(为0.5时为均匀的)下,模拟60次实验,每次投硬币8次,统计正面朝上的 ...

  7. 网络斗地主游戏的完整设计与实现(五)随机发牌功能的实现

    在扑克牌游戏中,生成一幅随机打乱的牌型,然后分发给玩家,是必须要实现的基本功能. 基本原理肯定是使用随机数,但是只有随机数达不到效果,因为是要随机地打乱顺序,而不是仅仅生成54个随机数.因为随机数有可 ...

  8. 上班摸鱼系列|Python开发命令行斗地主

    前言 大家周末好-最近更新了太多的数据分析内容不知道各位有没有疲劳,今天给大家带来的是如何上班如何高级摸鱼:用Python开发一个命令行斗地主小游戏,利用跑程序的时间来一把斗地主岂不是非常快乐,关键是 ...

  9. python 斗地主 图形界面_上班摸鱼必备|Python开发命令行斗地主

    原标题:上班摸鱼必备|Python开发命令行斗地主 今天给大家带来的是如何上班如何高级摸鱼: 用Python开发一个命令行斗地主小游戏,利用跑程序的时间来一把斗地主岂不是非常快乐,关键是没有时间限制, ...

最新文章

  1. Linux内存管理 (4)分配物理页面
  2. 浅谈Spring框架注解的用法分析
  3. 创建一个html网页,创建第一个HTML网页(未完待续)
  4. linux系统web站点设置-http基础设置
  5. 搭建大数据开发环境-Hadoop篇
  6. hana抽数到mysql,HANA数据库管理Tenant DB常用操作
  7. awr报告与statspack报告
  8. GitHub官网入门教程翻译
  9. tween andr_安装Android Studio并在Android Studio上创建新的Android项目
  10. 高等数学 下册 第九章 多元函数的概念 笔记
  11. Delphi FastReport组件下载,包含多个版本,自己选择
  12. python课程的中期报告范文_毕业论文中期报告范文(毕业论文中期检查范文8篇)...
  13. vtuber面部捕捉工具_Live2D纸片人出道?VTuber工具VUP了解下
  14. IDEA中Python使用url时报错:Traceback (most recent call last)
  15. PHP如何实现微信网页授权
  16. 【图解版】B2C电商平台解决方案
  17. WPF 逻辑树和可视化树
  18. 从视频中提取图片(截取ppt)
  19. 微信小程序base64图片转换临时链接
  20. Java 碰壁小球游戏实例教程

热门文章

  1. qbo 点云数据(距离)的获取
  2. .netframewor金山卫士推送微软8月补丁 IE所有版本存在高危漏洞
  3. 上大学之前,一定要明白这10大潜规则,你会少走很多人生弯路
  4. 常见的乳腺癌标记物研究
  5. html里p标签里面如何让首行缩进两格?
  6. h5物体拖动_网易爆款H5 交互玩法大合集(不看后悔系列)
  7. android 蓝牙hf编程,基于Android蓝牙Inband ring功能实现.doc
  8. MMGG测评 感动全球的链上自走棋——HeroesEmpires游戏拆解
  9. Navicat For MySQL的简单使用(一)
  10. 模糊控制器隶属度函数绘制