最近在自學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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/306434.html
標籤:python
