趣味Python题目10月8日

最近在自学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

你可能感兴趣的:(python)