描述
本题限定用以下方法打乱序列中的元素
random.shuffle()
几个人用一副扑克牌玩游戏,游戏过程通常有洗牌、发牌、理牌等动作,编写程序模拟游戏过程。新牌花色顺序为♠、♥、♣、♦,花色相同时按2、3、4、5、6、7、8、9、10、J、Q、K、A,最后是小王和大王,小王用'jokers'、大王用 'JOKERS'表示。
按以下要求编写程序:
-
按顺序输出新牌
-
洗牌
-
按洗好的顺序输出洗过的牌
-
将牌轮流分给参与游戏的人,按分牌的顺序输出每个人手上的牌
-
对每个人手上的牌升序排序并输出
-
输出时,每张牌间用空格分隔
输入
输入一个正整数表示参与游戏的人数,题目限定使每个人分到的牌数相同,即人数为54的约数
输入一个正整数表示随机数种子,本题使用随机数种子保证产生序列的稳定性来完成自动评测
输出
按顺序输出新牌
按洗好的顺序输出洗过的牌
按分牌的顺序输出每个人手上的牌
输出每个人手上升序排序的牌
样例
输入(1)
2
1024
输出(1)
参与游戏的人数:2
新牌顺序
♠2 ♠3 ♠4 ♠5 ♠6 ♠7 ♠8 ♠9 ♠10 ♠J ♠Q ♠K ♠A ♥2 ♥3 ♥4 ♥5 ♥6 ♥7 ♥8 ♥9 ♥10 ♥J ♥Q ♥K ♥A ♣2 ♣3 ♣4 ♣5 ♣6 ♣7 ♣8 ♣9 ♣10 ♣J ♣Q ♣K ♣A ♦2 ♦3 ♦4 ♦5 ♦6 ♦7 ♦8 ♦9 ♦10 ♦J ♦Q ♦K ♦A jokers JOKERS
洗牌顺序
♣K ♠2 ♠7 ♠J ♦9 jokers ♣8 ♥2 ♦8 ♠3 ♣A ♥K ♠9 ♥J ♦J ♣5 ♠A ♠K ♣J ♥5 ♠10 ♥Q ♣3 ♦4 ♥8 ♣9 ♣7 ♥3 ♥10 ♣2 ♦10 ♦K ♦2 ♠8 ♠5 ♦6 ♠Q ♦5 ♦7 ♥7 ♦Q ♥9 ♠6 ♣Q ♣6 ♣4 ♠4 ♦A ♥4 ♥6 ♣10 ♦3 ♥A JOKERS
每个人手上分到的牌
♣K ♠7 ♦9 ♣8 ♦8 ♣A ♠9 ♦J ♠A ♣J ♠10 ♣3 ♥8 ♣7 ♥10 ♦10 ♦2 ♠5 ♠Q ♦7 ♦Q ♠6 ♣6 ♠4 ♥4 ♣10 ♥A
♠2 ♠J jokers ♥2 ♠3 ♥K ♥J ♣5 ♠K ♥5 ♥Q ♦4 ♣9 ♥3 ♣2 ♦K ♠8 ♦6 ♦5 ♥7 ♥9 ♣Q ♣4 ♦A ♥6 ♦3 JOKERS
每个人手上排序的牌
♠4 ♠5 ♠6 ♠7 ♠9 ♠10 ♠Q ♠A ♥4 ♥8 ♥10 ♥A ♣3 ♣6 ♣7 ♣8 ♣10 ♣J ♣K ♣A ♦2 ♦7 ♦8 ♦9 ♦10 ♦J ♦Q
♠2 ♠3 ♠8 ♠J ♠K ♥2 ♥3 ♥5 ♥6 ♥7 ♥9 ♥J ♥Q ♥K ♣2 ♣4 ♣5 ♣9 ♣Q ♦3 ♦4 ♦5 ♦6 ♦K ♦A jokers JOKERS
代码
import random
def start():
"""初始顺序,返回元素为字符串的列表"""
cards_start = [i + j for i in desigh for j in num] + ghost
return cards_start
def shuffle_cards(cards_start):
"""打乱顺序,返回元素为字符串的列表"""
random.shuffle(cards_start)
return cards_start
def traver(cards_shuffle, m):
"""发牌给m个人,返回二维列表"""
person = []
for i in range(m):
person.append(cards_shuffle[i::m])
return person
def sort_cards(person, m):
"""对m个人手上的牌进行升序排序,花色按黑红梅方,牌面按点数,大王最大,小王第二大"""
person_sort = []
for i in range(m):
if ('jokers' in person[i]) and ('JOKERS' in person[i]):
person[i].remove('jokers')
person[i].remove('JOKERS')
person_sort.append(sorted(person[i], key=lambda x: (desigh.index(x[0]), num.index(x[1:])))+['jokers', 'JOKERS'])
elif 'jokers' in person[i]:
person[i].remove('jokers')
person_sort.append(sorted(person[i], key=lambda x: (desigh.index(x[0]), num.index(x[1:])))+['jokers'])
elif 'JOKERS' in person[i]:
person[i].remove('JOKERS')
person_sort.append(sorted(person[i], key=lambda x: (desigh.index(x[0]), num.index(x[1:])))+['JOKERS'])
else:
person_sort.append(sorted(person[i], key=lambda x: (desigh.index(x[0]), num.index(x[1:]))))
return person_sort
if __name__ == '__main__':
desigh = ['♠', '♥', '♣', '♦'] # 表示黑桃、红桃、梅花、方块
num = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
ghost = ['jokers', 'JOKERS']
n = int(input()) # 输入参与游戏的人数
s = int(input())
random.seed(s)
print(f'参与游戏的人数:{n}')
cards = start()
print('新牌顺序')
print(*cards)
cards_after = shuffle_cards(cards)
print('洗牌顺序')
print(*cards_after)
cards_n = traver(cards_after, n)
print('每个人手上分到的牌')
for i in range(n):
print(*cards_n[i])
cards_sort = sort_cards(cards_n, n)
print('每个人手上排序的牌')
for i in range(n):
print(*cards_sort[i])