最近在自学Python,无意看到群友一道比较有趣的问题,故尝试给出答案。目前给出的版本是最简单的情况,没有考虑比较牌大小中出现数字或者字母重复的情况,以后有时间或许会给出更精细的版本。
编写程序,进行扑克牌大小比较。利用函数方法,生成52张四色(梅花,方块,黑桃,红桃)扑克牌,玩家的人数由用户输入,根据玩家的人数进行发牌,然后比较大小。
1. 牌的生成、发牌、大小比较,必须为函数
2. 程序要有终止条件
3. 用户不选择程序终止,那么继续发牌、出牌,进行大小比较
提示:可以使用以下列表表示信息
```python
num = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2']
color = ['红桃', '梅花', '方块', '黑桃']
playerName = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸', '子', '丑', '寅', '卯', '巳', '午', '未', '申', '酉', '戌', '亥']
```
# 需要用到的信息列表
num = ['3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A', '2']
color = ['红桃', '梅花', '方块', '黑桃']
playername = ['甲', '乙', '丙', '丁', '戊', '己', '庚', '辛', '壬', '癸',
'子', '丑', '寅', '卯', '巳', '午', '未', '申', '酉', '戌', '亥']
# 需要定义的函数
def generate_porker():
'''
产生随机的52张牌,允许重复
'''
gp = []
import random
color_gp = random.choices(color, k = 52)
num_gp = random.choices(num, k =52)
for i in range(52):
gp.append(color_gp[i] + num_gp[i])
return gp
def deal_porker(n, gp):
'''
从52张牌中给每个玩家按照顺序发牌
'''
players = playername[0: n]
n_porker = int(52 / n)
deal = []
import random
for i in range(n):
temp = []
temp.append(playername[i])
temp.append(gp[i * (n_porker) : (i + 1) * n_porker])
deal.append(temp)
return deal
def discard_porker(n, deal):
'''
随机让每个玩家抽一张牌出来
'''
discard = []
import random
for i in range(n):
temp = []
temp.append(deal[i][0])
temp.append(random.choice(deal[i][1]))
discard.append(temp)
return discard
def compare(n, discard):
'''
比较出来赢家(不考虑数字和花色重复的情况)
'''
temp = 0
for i in range(n):
if len(discard[temp][1]) == 4:
a = discard[temp][1][-2:]
else:
a = discard[temp][1][-1:]
if len(discard[i][1]) == 4:
b = discard[i][1][-2:]
else:
b = discard[i][1][-1:]
if num.index(a) < num.index(b):
temp = i
return discard[temp][0]
flag = 1
while flag:
n = eval(input('请输入玩家的人数(可以被52整数的正整数,不大于22):'))
if n < 0 or n > 22 or 52 % n > 0:
print('请重新输入玩家的人数!')
continue
else:
gp = generate_porker()
deal = deal_porker(n, gp)
for i in range(n):
print('{}的牌为:{}'.format(deal[i][0],deal[i][1]))
discard = discard_porker(n, deal)
for i in range(n):
print('{}出的牌为:{}'.format(discard[i][0], discard[i][1]))
winner = compare(n, discard)
print('{}赢'.format(winner))
temp = eval(input('请选择你要执行的操作(1.继续 2.退出):'))
if temp == 2:
flag = 0