文章目录
一、如何洗牌
思路
1、准备一副有序的牌(使用list来实现)
2、遍历这个list,并将遍历到的元素放入set集合中就能将牌打乱
3、再将其分为四部分(三个玩家牌和地主牌)
洗牌方法的所有代码
python
pokerList = []
playerOneList = []
playerTwoList = []
playerThreeList = []
dizhuList = []
def shufflePoker():
pokerSet = set()
colourList = ["♣","♠","♦","♥"]
numList = ["3","4","5","6","7","8","9","10","J","Q","K","A","2"]
for num in numList:
for colour in colourList:
pokerList.append(colour + num)
pokerList.append("小王")
pokerList.append("大王")
for poker in pokerList:
pokerSet.add(poker)
count = 0
for poker in pokerSet:
if count == 51 or count == 52 or count == 53:
dizhuList.append(poker)
elif count % 3 == 0:
playerOneList.append(poker)
elif count % 3 == 1:
playerTwoList.append(poker)
elif count % 3 == 2:
playerThreeList.append(poker)
count += 1
二、如何排序扑克牌
思路
1、设置两个字典dict,里面定义每个花色和扑克数的权重(大小王的权重额外定义):
python
num_weights = {"3":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"J":9,"Q":10,"K":11,"A":12,"2":13}
colour_weight = {"♣":1,"♠":2,"♦":3,"♥":4}
2、循环洗完牌之后的集合,计算集合中每张牌的权重:
因为花色和扑克数都有权重,所以用元组(tuple)接收权重最合适,使用list也可以
python
weightList = []
for poker in playerList:
# 大小王的花色和扑克数的权重额外定义
if poker == "小王":
weightList.append((14,5))
elif poker == "大王":
weightList.append((15,6))
else:
poker_colour = poker[:1]
poker_num = poker[1:]
# 使用元组接收权重
weightList.append((num_weights[poker_num],colour_weight[poker_colour]))
3、将转变之后的权重排序:
python
sortedWeightList = sorted(weightList)
4、将排序之后的list中的每个元组元素转变为对应的花色和扑克数(在第一步定义的字典中查找):
使用python推导式来获取
排序之后的list循环出来是一个个元组
python
pokerWeightList = []
# 循环遍历出来的是一个个元组
for poker in sortedWeightList:
if poker[0] == 14:
pokerWeightList.append("小王")
elif poker[0] == 15:
pokerWeightList.append("大王")
else:
colour = [k for k,v in colour_weight.items() if int(poker[1]) == v]
num = [k for k,v in num_weights.items() if int(poker[0]) == v]
str1 = colour[0] + num[0]
pokerWeightList.append(str1)
排序方法的所有代码
python
def sortPoker(playerList):
num_weights = {"3":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"J":9,"Q":10,"K":11,"A":12,"2":13}
colour_weight = {"♣":1,"♠":2,"♦":3,"♥":4}
weightList = []
for poker in playerList:
if poker == "小王":
weightList.append((14,5))
elif poker == "大王":
weightList.append((15,6))
else:
poker_colour = poker[:1]
poker_num = poker[1:]
weightList.append((num_weights[poker_num],colour_weight[poker_colour]))
sortedWeightList = sorted(weightList)
pokerWeightList = []
for poker in sortedWeightList:
if poker[0] == 14:
pokerWeightList.append("小王")
elif poker[0] == 15:
pokerWeightList.append("大王")
else:
colour = [k for k,v in colour_weight.items() if int(poker[1]) == v]
num = [k for k,v in num_weights.items() if int(poker[0]) == v]
str1 = colour[0] + num[0]
pokerWeightList.append(str1)
return pokerWeightList
三、如何叫地主
思路
输入抢地主的玩家,然后判断输入内容为哪个玩家,并将地主牌和这个玩家的牌合并:
叫地主的所有代码
python
def lookPoker(dizhu):
if dizhu == playerOne:
playerOneList1 = playerOneList + dizhuList
newPlayerOneList = sortPoker(playerOneList1)
newPlayerTwoList = sortPoker(playerTwoList)
newPlayerThreeList = sortPoker(playerThreeList)
print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
elif dizhu == playerTwo:
playerTwoList1 = playerTwoList + dizhuList
newPlayerOneList = sortPoker(playerOneList)
newPlayerTwoList = sortPoker(playerTwoList1)
newPlayerThreeList = sortPoker(playerThreeList)
print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
elif dizhu == playerThree:
playerThreeList1 = playerThreeList + dizhuList
newPlayerOneList = sortPoker(playerOneList)
newPlayerTwoList = sortPoker(playerTwoList)
newPlayerThreeList = sortPoker(playerThreeList1)
print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
else:
print("没有这个玩家!!!")
四、全部代码
python
pokerList = []
playerOneList = []
playerTwoList = []
playerThreeList = []
dizhuList = []
def shufflePoker():
pokerSet = set()
colourList = ["♣","♠","♦","♥"]
numList = ["3","4","5","6","7","8","9","10","J","Q","K","A","2"]
for num in numList:
for colour in colourList:
pokerList.append(colour + num)
pokerList.append("小王")
pokerList.append("大王")
for poker in pokerList:
pokerSet.add(poker)
count = 0
for poker in pokerSet:
if count == 51 or count == 52 or count == 53:
dizhuList.append(poker)
elif count % 3 == 0:
playerOneList.append(poker)
elif count % 3 == 1:
playerTwoList.append(poker)
elif count % 3 == 2:
playerThreeList.append(poker)
count += 1
def sortPoker(playerList):
num_weights = {"3":1,"4":2,"5":3,"6":4,"7":5,"8":6,"9":7,"10":8,"J":9,"Q":10,"K":11,"A":12,"2":13}
colour_weight = {"♣":1,"♠":2,"♦":3,"♥":4}
weightList = []
for poker in playerList:
if poker == "小王":
weightList.append((14,5))
elif poker == "大王":
weightList.append((15,6))
else:
poker_colour = poker[:1]
poker_num = poker[1:]
weightList.append((num_weights[poker_num],colour_weight[poker_colour]))
sortedWeightList = sorted(weightList)
pokerWeightList = []
for poker in sortedWeightList:
if poker[0] == 14:
pokerWeightList.append("小王")
elif poker[0] == 15:
pokerWeightList.append("大王")
else:
colour = [k for k,v in colour_weight.items() if int(poker[1]) == v]
num = [k for k,v in num_weights.items() if int(poker[0]) == v]
str1 = colour[0] + num[0]
pokerWeightList.append(str1)
return pokerWeightList
def lookPoker(dizhu):
if dizhu == playerOne:
playerOneList1 = playerOneList + dizhuList
newPlayerOneList = sortPoker(playerOneList1)
newPlayerTwoList = sortPoker(playerTwoList)
newPlayerThreeList = sortPoker(playerThreeList)
print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
elif dizhu == playerTwo:
playerTwoList1 = playerTwoList + dizhuList
newPlayerOneList = sortPoker(playerOneList)
newPlayerTwoList = sortPoker(playerTwoList1)
newPlayerThreeList = sortPoker(playerThreeList)
print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
elif dizhu == playerThree:
playerThreeList1 = playerThreeList + dizhuList
newPlayerOneList = sortPoker(playerOneList)
newPlayerTwoList = sortPoker(playerTwoList)
newPlayerThreeList = sortPoker(playerThreeList1)
print(f'{playerOne}玩家的牌是:' + ','.join(newPlayerOneList))
print(f'{playerTwo}玩家的牌是:' + ','.join(newPlayerTwoList))
print(f'{playerThree}玩家的牌是:' + ','.join(newPlayerThreeList))
else:
print("没有这个玩家!!!")
print("************* 欢迎进入 欢乐 斗地主 *************")
playerOne = input("请输入第一位玩家的姓名")
playerTwo = input("请输入第二位玩家的姓名")
playerThree = input("请输入第三位玩家的姓名")
def pokerMain():
print("-"*50)
print("洗牌中。。。")
print("-" * 50)
shufflePoker()
print("洗牌完成")
print("-" * 50)
print("发牌中。。。")
print("-" * 50)
print("发牌完成")
print("-" * 50)
dizhu = input("请输入叫地主的玩家:")
lookPoker(dizhu)
pokerMain()