扑克是流行全世界的一种纸牌。一副扑克牌有54张牌,其中52张是正牌,另2张是副牌(大王和小王)。52张正牌又均分为13张1组,共有黑桃、红桃、梅花、方块四组。每组花色的牌包括从2-10以及A、J、Q、K标示的13张牌。在比较流行的斗地主游戏中,三个玩家中除庄家外,另外两个玩家一人要拿17张牌。如果洗牌过程是完美的,那么对于一个玩家而言,拿到哪十七张牌是完全随机的。

本文引用自作者编写的下述图书; 本文允许以个人学习、教学等目的引用、讲授或转载,但需要注明原作者"海洋饼干叔
叔";本文不允许以纸质及电子出版为目的进行抄摘或改编。
1.《Python编程基础及应用》,陈波,刘慧君,高等教育出版社。免费授课视频 Python编程基础及应用
2.《Python编程基础及应用实验教程》, 陈波,熊心志,张全和,刘慧君,赵恒军,高等教育出版社Python编程基础及应用实验教程
3. 《简明C及C++语言教程》,陈波,待出版书稿。免费授课视频


下述程序首先生成了54张扑克牌,然后借助于随机数从中抽取17张牌。

#poker.py
import random                                                   #导入随机数模块
suits = ["♠","♥","♦","♣"]                    #四种花色
ranks = ["A","2","3","4","5","6","7","8","9","10","J","Q","K"]  #13种牌面
#将花色与牌面组合并加上大小王,生成54张牌的列表
cards = [x+y for x in suits for y in ranks] + ["Red Joker", "Black Joker"]
#print(cards)
cardsHold = []                               #持牌列表
for i in range(17):                          #循环17次,共取17张牌idx = random.randint(0,len(cards)-1)     #生成一个0 到 剩余牌数-1的随机数c = cards.pop(idx)                       #将指定下标的牌取出cardsHold.append(c)                      #取出的牌添加至持牌列表cardsHold.sort()                             #持牌列表排序
print(cardsHold)                             #打印出来看看手气

执行结果:

['Red Joker', '♠10', '♠2', '♠J', '♣2', '♣5', '♣6', '♣A', '♣K', '♥6', '♥8', '♥A', '♥K', '♦10', '♦2', '♦4', '♦Q']
代码说明
random模块用于生成随机数。
suits列表存储了4种不同的花色,分别对应黑桃,红桃,方块和梅花。
ranks列表则存储了每种花色的13色牌面,从2-10,以及A, J, Q, K。
cards列表借助于本章介绍的列表快速生成语法来生成,其内容形如:[‘Spades_A’, ‘Spades_2’, ‘Spades_3’… ];读者可以在cards列表生成后添加执行print(cards),查看其内容。请注意,大小王Red Joker和Black Joker也通过列表加法添加到了列表中。
cardsHold列表用于存储已经拿到的牌。
借助于range(17)数值列表,程序进行了17次循环。每一次都借助于random.randint()函数,生成一个从0到剩余牌数-1的随机数idx, 将后以idx为下标,从cards中弹出(pop)一张牌并存入cardsHold。容易看出,上述循环每执行一次,cards中的牌就会少一张,cardsHold中的牌就会多一张。
为了便于迅速查看”手气“的好坏,这里使用了cardsHold.sort()对牌进行了排序。

请读者注意,因为“随机数”的存在,读者实际运行的结果几乎肯定与上述结果不同。请读者多次运行本程序,观察持牌序列的变化及”随机性“。

出于教学目的,有时我们会化简为繁。比如本例,从cards中随机抽出17张牌事实上不需要循环,使用下述代码可以直接办到:

random.shuffle(cards)   #随机打乱
print(cards[:17])   #切片得前17张

但如果这样写,学生学不到算法的过程知识。

为了帮助更多的年轻朋友们学好编程,作者在B站上开了两门免费的网课,一门零基础讲Python,一门零基础C和C++一起学,拿走不谢!

简洁的C及C++

Python编程基础及应用

如果你觉得纸质书看起来更顺手,目前Python有两本,C和C++在出版过程中。

Python编程基础及应用

Python编程基础及应用实验教程

Python趣味案例 - 抓扑克牌的手气相关推荐

  1. python趣味案例编程 Pdf,小小的python编程故事

    python编程 20 Python编程请选择编玩边学.Python是一种全新的程序设计语言,可以用它很容易地创造交互式故事情节.动画.游戏.他"我们的目的不是要创办电脑程序编写大军,而是帮 ...

  2. Python趣味案例——剪刀石头布小游戏改进版(自由实现三局两胜五局三胜七局四胜。。。)

    前言 最近看了这篇知乎文章,深受启发: Python之石头剪刀布小游戏(史上最详细步骤) - 真小凡的文章 - 知乎 Python中实现剪刀石头布游戏的方式有很多种,这个博主允许直接输入石头.剪刀.布 ...

  3. 抓扑克牌的手气——三人手牌发放及叫地主机制

    小白编写,请见谅 import random #导入随机数模块 suits = ["♠","♥","♦","♣"] #四 ...

  4. python人工智能应用实例_90后博士说,从Python到人工智能只差这35个趣味案例,越学越有趣...

    有趣的生活每个人都向往,有趣的Python编程学习方式却不是每个人都体验过. 以这35个趣味案例开始,让兴趣成为学习Python最好的动力. 看看这35个趣味案例,几乎是每个案例都对应着一个Pytho ...

  5. python 股票图表_k线图分析法_【趣味案例】用Python绘制K线图,一眼看清股市状况...

    本文介绍关于[趣味案例]用Python绘制K线图,一眼看清股市状况及神一般的裸k交易法,精髓就这三步,一目了然!精髓就这三步,一目了然!(附图解析)的相关内容. [趣味案例]用Python绘制K线图, ...

  6. python爬虫简单实例-最简单的Python爬虫案例,看得懂说明你已入门,附赠教程

    原标题:最简单的Python爬虫案例,看得懂说明你已入门,附赠教程 这是最简单的Python爬虫案例,如果你能看懂,那么请你保持信心,因为你已经入门Python爬虫,只要带着信心和努力,你的技术能力在 ...

  7. python爬虫案例-Python爬虫案例集合

    原标题:Python爬虫案例集合 urllib2 urllib2是Python中用来抓取网页的库,urllib2 是 Python2.7 自带的模块(不需要下载,导入即可使用) 在python2.x里 ...

  8. python趣味编程10例-Python趣味编程与精彩实例

    Python趣味编程与精彩实例 共19 章,前12章主要以Python 基础知识如文件创建.输出与变量.输入与判断.运算符和循环.列表和字典.函数编程.pygame的各种知识为主,13-19章则以游戏 ...

  9. 《Python趣味创意编程》新书上架了

    <Python趣味创意编程>案例视频 <Python趣味创意编程>新书上架,目前京东.淘宝.当当上搜书名就可以找到,比如: https://item.jd.com/130745 ...

最新文章

  1. 修改服务器端的访问模式,ftp服务器端 修改主动模式
  2. socket中select针对阻塞I/O复用注意的问题
  3. python中进程创建—fork()
  4. A - 顺序表应用1:多余元素删除之移位算法
  5. spring 13-Spring框架基于Annotation的AOP配置
  6. 10个痛点:IT部门如何面对边缘计算
  7. 自动柜员机属于微型计算机的一种,自动柜员机属于微型计算机的一种。(  )...
  8. nodejs+vue+elementui宠物医院管理系统php-java-python
  9. 吉林大学超星学习通02(2)
  10. 网站 小图标 大全 url
  11. 安全技术 密钥安全_硬件安全密钥不断被人们追忆; 他们安全吗?
  12. 【OKR】11-12双月 OKR复盘
  13. ng2 绑定输出html,Angular2的数据绑定
  14. 小杜机器人线下店_小度首家官方体验店开业啦!线下体验小度系列产品 智能家居任你玩...
  15. USACO 奶牛食品(最大流)
  16. 程序员护眼心得——20171229
  17. 今日金融词汇--- 股权质押
  18. Python爬取高清无版权美图
  19. 互联网时代,政府如何应对网络舆情监测危机
  20. Post与Put的区别

热门文章

  1. 找到100亿个URL中重复的URL
  2. 【iOS】开发者账号
  3. 区别:αβ^T、βα^T、αα^T、(Aα)(Aα)^T、β^Tα、α^Tβ、α^Tα、(Aα)^T(Aα)
  4. Matplotlib_2
  5. 内地移动支付全球领先?醒醒吧,香港在这5个方面已赶超内地了!
  6. 开源是不是程序员悲剧的根源?
  7. 使用react制作点赞组件
  8. 利用依存分析完成开放领域关系抽取
  9. 微信小程序简易音频播放器(wx.getBackgroundAudioManager())
  10. 谷歌站内搜索-祝你流量翻倍!