Python解决斗地主发牌问题及列表基础知识运用
Posted 轻风乘舟
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python解决斗地主发牌问题及列表基础知识运用相关的知识,希望对你有一定的参考价值。
Python解决斗地主发牌问题及列表基础知识运用
用一张列表保存54张扑克牌,洗牌,按斗地主的发牌方式把牌
发给三个玩家,多的三张牌给第一个玩家,把每个玩家手上的牌显示出来。
我们运用前面所学的列表与循环分支结构知识求解。
方法一
shuffle()
是库random
中的函数其作用为乱序,打乱顺序。
#首先我们要获得一副扑克牌
import random
cards = []#一次一次录入会比较麻烦
suites = ['♥','♦','♠','♣']# 没图形的可以输入字符表示如:方块
faces = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
for suite in suites:#做两次for循环每个花色与牌色对应
for face in faces:
#print(f'{suite}{face}',end=' ')
cards.append(f'{suite}{face}')#把牌放入card
#把大小王加入其中
cards.append('大王')
cards.append('小王')
print(cards) #获得一副新牌
random.shuffle(cards)#洗牌(随机乱序)
#做三个玩家空列表 把每次发到的牌放到对应的玩家空列表中
players_one = []
players_two = []
players_three = []
#开始发牌,每人17张
for _ in range(1,18):
players_one.append(cards.pop())
players_two.append(cards.pop())
players_three.append(cards.pop())
'''函数pop()默认删除的是列表cards的最后一个元素,pop删除的过程中还会返回其删除的元素,再利用append追加到每个玩家空列表中,如要从前面发牌则用pop(0)'''
players_one.extend(cards)#extend()扩展合并,把最后三张牌拼接到第一个玩家(地主)
print(f'地主牌为{players_one}')
print(f'农民1{players_two})')
print(f'农民2{players_three}')
方法二
运用列表切片索引知识解决问题
import random
cards = []#一次一次录入会比较麻烦
suites = ['♥','♦','♠','♣']# 没图形的可以输入字符表示如:方块
faces = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
for suite in suites:#做两次for循环每个花色与牌色对应
for face in faces:
#print(f'{suite}{face}',end=' ')
cards.append(f'{suite}{face}')#把牌放入card
#把大小王加入其中
cards.append('大王')
cards.append('小王')
print(cards) #获得一副新牌
random.shuffle(cards)#洗牌(随机乱序)
# 与上一种方法不一样的是发牌的方式
# 开始发牌,每人17张
player_one = cards[1:52:3] #步长为3表示每人一张
players_two = cards[2:52:3]
player_three = cards[3:52:3]
last = cards[51:] #最后三张放为一个集合
player_one = player_one + last #把最后三张给地主
#也可以用函数extend()扩展合并
print(player_one)
print(players_two)
print(player_three)
方法三
与前两种方法不一样的是,这里我们将会用到嵌套列表
可以改变玩家的数量与玩牌的方式,比如 三个人玩炸金花
嵌套列表如:nums = [ [], [], [], [] ]
相当于大盒子里面再放一些小盒子
import random
cards = []#一次一次录入会比较麻烦
suites = ['♥','♦','♠','♣']# 没图形的可以输入字符表示如:方块
faces = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
for suite in suites:#做两次for循环每个花色与牌色对应
for face in faces:
#print(f'{suite}{face}',end=' ')
cards.append(f'{suite}{face}')#把牌放入card
#把大小王加入其中
cards.append('大王')
cards.append('小王')
print(cards) #获得一副新牌
random.shuffle(cards)#洗牌(随机乱序)
players = [[] for _ in range(3)] #可改变范围规定参与人数
for _ in range(3):#改变范围规定发牌数
for player in players:# 遍历循环玩家,循环发牌
player.append(porke_nums.pop())
for player in players: # 遍历循环玩家,整理发到手上的扑克
player.sort(key=lambda x: x[1:])
for card in player:# 循环输出玩家手里的扑克
print(card, end=' ')
print()
以上是关于Python解决斗地主发牌问题及列表基础知识运用的主要内容,如果未能解决你的问题,请参考以下文章
java斗地主扑克 扑克牌 洗牌 发牌 Collection 集合练习