一摞python风格的纸牌
一摞python风格的纸牌
import collections
# 定义卡牌类
Card = collections.namedtuple('Card', ['rank', 'suit'])
# 法式扑克牌类
class FrenchDeck:
ranks = [str(n) for n in range(2, 11)] + list('JQKA')
suits = 'spades diamonds clubs hearts'.split()
def __init__(self):
self._cards = [Card(rank, suit) for suit in self.suits
for rank in self.ranks]
def __len__(self):
return len(self._cards)
def __getitem__(self, position):
return self._cards[position]
# 测试代码
if __name__ == "__main__":
# 创建一副扑克牌
deck = FrenchDeck()
# 1. 测试牌组长度
print(f"牌组共有 {len(deck)} 张牌") # 应该输出52张
# 2. 测试获取特定位置的牌
print("\n测试特定位置的牌:")
print(f"第一张牌: {deck[0]}") # 黑桃2
print(f"最后一张牌: {deck[-1]}") # 红桃A
print(f"第10张牌: {deck[9]}") # 黑桃J
# 3. 测试切片功能
print("\n测试切片功能:")
print("前5张牌:", deck[:5]) # 黑桃2到黑桃6
print("最后3张牌:", deck[-3:]) # 红桃Q、红桃K、红桃A
# 4. 测试迭代功能
print("\n测试迭代功能 - 前10张牌:")
for card in list(deck)[:10]:
print(card)
# 5. 测试成员检查
print("\n测试成员检查:")
print(f"黑桃A在牌组中: {Card('A', 'spades') in deck}") # True
print(f"方片1在牌组中: {Card('1', 'diamonds') in deck}") # False
# 6. 测试随机抽取
import random
print("\n测试随机抽取3张牌:")
for _ in range(3):
print(random.choice(deck))
以下是代码中单词的翻译:
-
import collections:导入 集合(模块) -
Card = collections.namedtuple('Card', ['rank', 'suit']):Card:卡牌(类名,此处为专有名词,不翻译)namedtuple:命名元组(Python 中的一种数据类型)rank:点数(指牌的数字或字母大小)suit:花色(指扑克牌的四种花色)
-
class FrenchDeck:FrenchDeck:法式扑克牌(指标准52张扑克牌,不翻译)
-
ranks = [str(n) for n in range(2, 11)] + list('JQKA'):ranks:点数列表(牌面的数字和字母组合)J:Jack(杰克,扑克牌中的J)Q:Queen(王后,扑克牌中的Q)K:King(国王,扑克牌中的K)A:Ace(幺点,扑克牌中的A)
-
suits = 'spades diamonds clubs hearts'.split():suits:花色列表spades:黑桃diamonds:方块clubs:梅花hearts:红桃
-
def __init__(self):初始化方法(构造方法) -
self._cards:自身的卡牌列表(_表示该属性为内部使用,不建议外部直接访问) -
def __len__(self):长度方法(用于返回对象的长度) -
def __getitem__(self, position):获取元素方法(用于通过索引访问对象中的元素) -
position:位置(指索引位置)
简单来说,这段代码通过 namedtuple 定义了“卡牌”(包含“点数”和“花色”),然后用 FrenchDeck 类创建了一副标准法式扑克牌(包含黑桃、方块、梅花、红桃四种花色,以及2-10、J、Q、K、A等点数),并实现了获取牌组长度和通过索引访问卡牌的功能。

浙公网安备 33010602011771号