def sort_cards(person, m): """对m个人手上的牌进行升序排序,花色按黑红梅方,牌面按点数,大王最大,小王第二大""" ########## Begin ########## ########## End ##########
时间: 2023-06-15 08:07:49 浏览: 53
这里是一个可能的实现:
```
def sort_cards(person, m):
"""对m个人手上的牌进行升序排序,花色按黑红梅方,牌面按点数,大王最大,小王第二大"""
card_order = {'♠': 4, '♥': 3, '♣': 2, '♦': 1, '小王': 13, '大王': 14}
card_value = {'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, '小王': 14, '大王': 15}
for i in range(m):
person[i] = sorted(person[i], key=lambda card: (card_order[card[1]], card_value[card[0]]))
return person
```
解释:
- 我们用两个字典来记录牌的顺序,`card_order` 记录花色的顺序,`card_value` 记录牌面的顺序。
- 对于每个人的牌,我们用 `sorted` 函数进行排序,排序的关键是一个函数,我们用 `lambda` 表达式来定义这个函数,该函数先按照花色顺序排序,再按照牌面顺序排序。
- 最后返回排序后的牌。
相关问题
请用C语言编写程序模拟完成一个“比大小”纸牌游戏,计算机和用户各为一个玩家,每次给每家发三张牌,豹子(三张一样)最大,然后是对子+单张,然后是单张(黑桃A最大),相同的牌按黑红梅方的顺序比大小。
以下是一个简单的C语言程序,模拟完成一个比大小的纸牌游戏:
```c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main() {
srand(time(NULL)); // 初始化随机数种子
char* card_types[] = {"♠️", "♥️", "♣️", "♦️"}; // 牌型
char* card_numbers[] = {"A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"}; // 牌号
int cards[4][13] = {0}; // 记录牌是否已发出
int user_cards[3] = {0}; // 用户的牌
int computer_cards[3] = {0}; // 计算机的牌
// 发牌
int i, j;
for (i = 0; i < 3; i++) {
for (j = 0; j < 2; j++) {
int card_type, card_number;
do {
card_type = rand() % 4;
card_number = rand() % 13;
} while (cards[card_type][card_number]); // 如果这张牌已经发出,重新生成
if (j == 0) {
user_cards[i] = card_type * 13 + card_number;
} else {
computer_cards[i] = card_type * 13 + card_number;
}
cards[card_type][card_number] = 1;
}
}
// 展示用户的牌
printf("你的牌:");
for (i = 0; i < 3; i++) {
printf("%s%s ", card_types[user_cards[i] / 13], card_numbers[user_cards[i] % 13]);
}
printf("\n");
// 计算机出牌
int max_card = -1, max_index = -1;
for (i = 0; i < 3; i++) {
if (computer_cards[i] > max_card) {
max_card = computer_cards[i];
max_index = i;
}
}
computer_cards[max_index] = -1;
// 展示计算机的牌
printf("计算机的牌:");
for (i = 0; i < 3; i++) {
if (computer_cards[i] != -1) {
printf("%s%s ", card_types[computer_cards[i] / 13], card_numbers[computer_cards[i] % 13]);
}
}
printf("\n");
// 比较大小
int user_score = 0, computer_score = 0;
if (user_cards[0] % 13 == user_cards[1] % 13 && user_cards[1] % 13 == user_cards[2] % 13) {
user_score = 100000 + user_cards[0] % 13;
} else if (user_cards[0] % 13 == user_cards[1] % 13 || user_cards[1] % 13 == user_cards[2] % 13 || user_cards[0] % 13 == user_cards[2] % 13) {
int pair_card = -1, single_card = -1;
if (user_cards[0] % 13 == user_cards[1] % 13) {
pair_card = user_cards[0] % 13;
single_card = user_cards[2] % 13;
} else if (user_cards[1] % 13 == user_cards[2] % 13) {
pair_card = user_cards[1] % 13;
single_card = user_cards[0] % 13;
} else {
pair_card = user_cards[0] % 13;
single_card = user_cards[1] % 13;
}
user_score = 1000 * pair_card + single_card;
} else {
int max_card = -1;
for (i = 0; i < 3; i++) {
if (user_cards[i] % 13 > max_card) {
max_card = user_cards[i] % 13;
}
}
user_score = max_card;
}
if (computer_cards[0] % 13 == computer_cards[1] % 13 && computer_cards[1] % 13 == computer_cards[2] % 13) {
computer_score = 100000 + computer_cards[0] % 13;
} else if (computer_cards[0] % 13 == computer_cards[1] % 13 || computer_cards[1] % 13 == computer_cards[2] % 13 || computer_cards[0] % 13 == computer_cards[2] % 13) {
int pair_card = -1, single_card = -1;
if (computer_cards[0] % 13 == computer_cards[1] % 13) {
pair_card = computer_cards[0] % 13;
single_card = computer_cards[2] % 13;
} else if (computer_cards[1] % 13 == computer_cards[2] % 13) {
pair_card = computer_cards[1] % 13;
single_card = computer_cards[0] % 13;
} else {
pair_card = computer_cards[0] % 13;
single_card = computer_cards[1] % 13;
}
computer_score = 1000 * pair_card + single_card;
} else {
int max_card = -1;
for (i = 0; i < 3; i++) {
if (computer_cards[i] % 13 > max_card) {
max_card = computer_cards[i] % 13;
}
}
computer_score = max_card;
}
// 展示结果
printf("你的得分:%d\n", user_score);
printf("计算机的得分:%d\n", computer_score);
if (user_score > computer_score) {
printf("你赢了!\n");
} else if (user_score < computer_score) {
printf("你输了!\n");
} else {
printf("平局!\n");
}
return 0;
}
```
程序的流程如下:
1. 初始化随机数种子。
2. 定义牌型和牌号。
3. 定义一个二维数组 `cards`,记录每张牌是否已发出。
4. 定义两个数组 `user_cards` 和 `computer_cards`,分别用来存储用户和计算机的牌。
5. 用嵌套循环发牌,每次随机生成一个未发出的牌,分别发给用户和计算机。
6. 展示用户的牌。
7. 计算机出牌,选择最大的一张牌。
8. 展示计算机的牌。
9. 根据牌型计算用户和计算机的得分。
10. 展示结果,判断胜负。
程序中用到了一些 C 语言的基础知识,如数组、循环、条件判断等。如果你对这些知识还不熟悉,可以先学习一下。