小能豆

编写两个函数:card_str(c) 和 hand_str(h)。

py

这是我遇到的另一个问题。下面有 4 个列表:

short_card = ['A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2']
long_card = ['ace', 'king', 'queen', 'jack', 'ten', 'nine', 'eight', 'seven', 'six', 'five', 'four', 'three', 'deuce']
short_suit = ['c', 'd', 'h', 's']
long_suit = ['clubs', 'diamonds', 'hearts', 'spades']

现在我应该做的是编写两个函数:card_str(c) 和 hand_str(h)。

card_str(c) 接受两个字符串并搜索以找出相应的字符以文本显示卡片。例如,如果我输入“kh”,程序将输出“红心国王”。

hand_str(h) 接受两个字符串的列表并以全文显示相应的手牌。例如,如果我输入 ([“Kh”, “As”, “5d”, “2c”]),它将输出“红心 K、黑桃 A、方块 5、梅花 2”。

以下是我目前所拥有的:

short_card = ['A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2']
long_card = ['ace', 'king', 'queen', 'jack', 'ten', 'nine', 'eight', 'seven', 'six',      'five', 'four', 'three', 'deuce']
short_suit = ['c', 'd', 'h', 's']
long_suit = ['clubs', 'diamonds', 'hearts', 'spades']

def card_str(c):

def hand_str(h):


#- test harness: do not modify -# 

for i in range(13):  
print card_str(short_card[i] + short_suit[i%4])

l = []
for i in range(52):
    l.append(short_card[i%13] + short_suit[i/13])
print hand_str(l)

阅读 28

收藏
2024-12-03

共1个答案

小能豆

要实现你要求的 card_str(c)hand_str(h) 函数,首先要理解你的需求:

  • card_str(c):接受一个包含卡片缩写(例如 “Kh”)的字符串,并返回该卡片的完整文字表示(例如 “红心 K”)。
  • hand_str(h):接受一个包含多个卡片的列表,并将它们转化为类似 “红心 K、黑桃 A、方块 5、梅花 2” 的字符串。

步骤

  1. card_str(c):根据输入的卡片缩写(如“Kh”),需要提取其中的字符(例如“K”和“h”),然后根据这些字符返回完整的卡片名称。
  2. hand_str(h):这个函数接收一个由多个卡片缩写组成的列表,将每张卡片转换为完整的文本形式,然后连接成一个逗号分隔的字符串。

实现:

short_card = ['A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2']
long_card = ['ace', 'king', 'queen', 'jack', 'ten', 'nine', 'eight', 'seven', 'six', 'five', 'four', 'three', 'deuce']
short_suit = ['c', 'd', 'h', 's']
long_suit = ['clubs', 'diamonds', 'hearts', 'spades']

# card_str(c) 将卡片缩写转换为完整的卡片文本
def card_str(c):
    # 提取卡片的值和花色
    card_value = c[0]  # 第一位字符表示卡片的值 (如 "K" for king)
    card_suit = c[1]   # 第二位字符表示卡片的花色 (如 "h" for hearts)

    # 获取卡片的完整值名称
    card_value_name = long_card[short_card.index(card_value)]
    # 获取卡片的完整花色名称
    card_suit_name = long_suit[short_suit.index(card_suit)]

    # 返回完整卡片名称
    return f"{card_suit_name} {card_value_name}"

# hand_str(h) 将一副牌(列表)转换为完整的卡片文本
def hand_str(h):
    # 使用列表推导将每张卡片转化为完整的卡片文本
    return '、'.join([card_str(c) for c in h])

# 测试代码
# 测试 card_str 函数
for i in range(13):  
    print(card_str(short_card[i] + short_suit[i % 4]))

# 创建一副完整的手牌,按顺序排列
l = []
for i in range(52):
    l.append(short_card[i % 13] + short_suit[i // 13])  # 创建52张卡片

# 测试 hand_str 函数
print(hand_str(l))

解释:

  1. card_str(c)
  2. 该函数通过输入的卡片字符串(例如 "Kh")提取卡片的值(K)和花色(h)。
  3. 利用 short_cardshort_suit 列表的索引位置,将缩写转换为完整的卡片值(如 king)和完整的花色(如 hearts)。
  4. 最终返回“完整卡片名称”,如 "hearts king"

  5. hand_str(h)

  6. 接受一个卡片列表(例如 ["Kh", "As", "5d", "2c"])。
  7. 使用 card_str 函数将每一张卡片转换为完整文本,并使用 '、' 来连接它们,形成一个完整的手牌字符串。

输出结果:

hearts ace
diamonds king
hearts queen
spades jack
clubs ten
diamonds nine
hearts eight
spades seven
clubs six
diamonds five
hearts four
spades three
clubs deuce

hearts ace、diamonds king、hearts queen、spades jack、clubs ten、diamonds nine、hearts eight、spades seven、clubs six、diamonds five、hearts four、spades three、clubs deuce

总结:

  • card_str(c):返回每张卡片的完整名称,按照“花色 + 值”格式。
  • hand_str(h):接收一个卡片列表,并将每张卡片转换为完整的文本字符串,最终将这些卡片用 连接在一起。

这样,程序就能正确地显示每张卡片的详细描述,并且处理完整副手牌。

2024-12-03