page contents

python基础编程100例:第32期-洗牌

本文讲述了python基础编程100例:第32期-洗牌!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

attachments-2022-03-jdpDsbKH62329cfe0868b.png

本文讲述了python基础编程100例:第32期-洗牌!具有很好的参考价值,希望对大家有所帮助。一起跟随六星小编过来看看吧,具体如下:

第32期-洗牌

1 问题描述

扑克(英文:Poker),代指两种含义:一是指纸牌(playing cards);二是泛指以用纸牌这种游戏道具来玩的游戏,称为扑克游戏,如德州扑克。一副扑克牌共有54张牌,其中52张是正牌,另2张是副牌(大王和小王)。

52张正牌又均分为13张一组,并以黑桃、红桃、梅花、方块四种花色表示各组,每组花色的牌包括从1-10(1通常表示为A)以及J、Q、K标示的13张牌,玩法千变万化,多种玩法,如比较典型的玩法斗地主。

要求先从一副牌中挑出六张排,再给ABCD四个人随机分剩下的排,再随机指任一个人为地主,为其加上地主牌,最后再输出各家的牌

一种说法是由唐代天文学家张遂发明,最初称做“叶子戏”,因为纸牌只有树叶那么大。宋代文学家欧阳修在《归田录》中也有对“叶子戏”的记载,它是由文字游戏发展而来。到了元朝,马可波罗来中国游历,很长一段时间在中国的宫廷里担任官职,和上层知识分子过往甚密,学会了这一游戏。后来把它传播到了欧洲。一开始,它只是贵族们的奢侈品,但是因为它造价低廉、玩法多样,又容易学,很快就在民间流行开来。欧洲人根据自己的文化和传统,对纸牌游戏进行了改进,最终出现了“扑克牌”。

还有一种说法,相传早在秦末楚汉相争时期,大将军韩信为了缓解士兵的思乡之愁,发明了一种纸牌游戏,因为牌面只有树叶大小,所以被称为“叶子戏”。(“叶子牌”,有两个手指大小。长8公分,阔2.5公分的“叶子牌”,用丝绸及纸裱成,图案是用木刻版印成的)。

扑克牌的54张模式解释起来也非常奇妙,有兴趣的小伙伴可以去研究研究


2 解题思路

四种花色每种各十三张牌,可以使用排列组合的方式变成一副牌

根据随机选择的人作为地主并修改他的值,可以使用eval函数

随机分配需要使用random模块

3 解题方法

import random


suits = ['♥', '♠', '♣', '♦']

cardstr = ['J', 'Q', 'K', 'A']

cardnum = [str(i) for i in range(2, 11)]

cardking = ['大王', '小王']


card = []

for suit in suits:

    for num in cardnum:

        card.append(suit + num)

    for str in cardstr:

        card.append(suit + str)

card = card + cardking

random.shuffle(card)

地主牌=random.sample(card,6)

x=random.choice(['A','B','C','D'])

for i in 地主牌:

    card.remove(i)

A = []

B = []

C = []

D = []

for i in range(len(card)):

    if i % 4 == 0:

        A.append(card[i])

    if i % 4 == 1:

        B.append(card[i])

    if i % 4 == 2:

        C.append(card[i])

    if i % 4 == 3:

        D.append(card[i])

eval(x).extend(地主牌)

print(f'地主牌是{地主牌},地主是{x}')

print(f'A:{A}')

print(f'B:{B}')

print(f'C:{C}')

print(f'D:{D}')

第1行: 引入random模块

第3-6行: 将所有扑克牌中出现的数字及符号等作为列表列出

第8-14行: 根据刚刚的数字与符号的列表,将一副牌中的元素用列表列出

第15行: 使用random.shuffle方法将列表中的元素随机打乱,相当于洗牌

第16-19行: 随机选出六张牌作为地主牌,并从所有牌中去除这六张牌,并随机选择地主

第20-23行: 为ABCD四位角色创建列表,用于存放各位的牌

第24-32行: 由于之前的扑克牌已经随机打乱,模仿发牌的方式,将这些牌每四张分给同一个人

第33行: 为选择的地主加上地主牌

第34-38行: 打印地主、地主牌以及ABCD各位的牌


代码运行结果为:

attachments-2022-03-hi23d6me62329cda19bed.png

这里用到了random模块和eval函数,简单讲解下这两个:

random模块

1. random.random() 生成一个0-1的随机浮点数

2. random.randint(a,b) 生成一个a-b的随机整数(包括a和b)

3. random.randrange(a,b) 生成一个a-b的随机整数(不包括a和b)

4. random.shuffle(x) 将一个序列进行重新排序

5. random.choice(x) 返回一个序列中的一个随机元素

6. random.uniform(a,b) 用于生成指定范围内的随机浮点数

7. random.sample(sequence, k) 返回一个序列中的k个随机元素

eval()函数

eval() 函数用来执行一个字符串表达式,并返回表达式的值。

语法:

eval(expression[, globals[, locals]])

参数说明:

expression -- 表达式。

globals -- 变量作用域,全局命名空间,如果被提供,则必须是一个字典对象。

locals -- 变量作用域,局部命名空间,如果被提供,可以是任何映射对象。


例如:x = 7

eval( '3 * x' )

21

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-wo9NTH3C62919159cc995.jpeg

  • 发表于 2022-03-17 10:29
  • 阅读 ( 556 )
  • 分类:Python开发

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1474 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章