python - 我如何实现塔罗牌是直立的还是倒立的?
问题描述
我修改了 Luciano Ramalho 的 Fluent Python 中的 FrenchDeck 类,以尝试构建塔罗牌。由于元组是不可变的,我无法存储卡是否在元组中反转,所以我实现了如下所示的方向。
import collections
from random import getrandbits
Card = collections.namedtuple('Card', ['rank','suit'])
class FrenchTarot:
ranks = [str(n) for n in range(1,11)]+['Page','Knight','Queen','King']
suits = 'wands swords coins cups'.split()
major_arcana = ['The Fool', 'The Magician', 'The High Priestess', 'The Empress',
'The Hierophant', 'The Lovers', 'The Chariot', 'Strength',
'The Hermit', 'Wheel of Fortune', 'Justice', 'The Hanged Man',
'Death', 'Temperance', 'The Devil', 'The Tower', 'The Star',
'The Moon', 'The Sun', 'Judgement', 'The World']
def __init__(self):
self.minor = [Card(rank, suit) for suit in self.suits for rank in self.ranks]
self.major = [Card(rank, 'Major Arcana') for rank in self.major_arcana]
self._cards = self.major + self.minor
def __len__(self):
return len(self._cards)
def __repr__(self):
return f'Tarot Deck containing {len(self)} cards, {len(self.major)} Major Arcana, and {len(self.minor)} Minor Arcana'
def __getitem__(self,position):
if getrandbits(1):
orientation = 'Upright'
else:
orientation = 'Reversed'
return self._cards[position], orientation
def __setitem__(self, position, card):
self._cards[position] = card
当我尝试测试时,问题就来了
Card('The Fool', 'Major Arcana') in deck
它返回 False,让它返回 True 的唯一方法是指定方向(并随机猜测正确)。我不确定如何解决问题
编辑:很抱歉在第一次发布错误的代码块哎呀
解决方案
如果您想使用card in deck
,但in
没有按照您想要的方式行事,您可以使用__contains__
魔法方法覆盖该行为。这将使您能够编写忽略方向属性的自定义测试。
您还可以创建一个Card
覆盖__eq__
以比较他们的等级和西装但忽略他们的方向的类,以便您可以==
直观地使用。
推荐阅读
- javascript - 如何在 MapKit JS 中创建类似于 Google 的 Place Autocomplete 的自动完成查找
- python - Pandas 均值轴参数
- python-3.x - Openpyxl - 应用格式化后尝试保存工作簿时出现 WinError 32
- ios - 导航栏背景图片不延伸到搜索栏
- c# - 如何创建包含两个具有相同结构的数据表的比较结果的数据表?
- sql - 如何比较具有不同数据类型组的两列
- php - “未找到查看 [layouts.app.auth]。(查看:/Applications/XAMPP/xamppfiles/htdocs/blog/resources/views/auth/passwords/email.blade.php)”
- linux - 我如何使用带有 unicode 字符的 sed
- javascript - 使用 Javascript 将数字 (1-1000) 转换为控制台日志中的单词
- php - 将数字转换为特定格式而不返回