Python纸牌游戏效率
Posted
技术标签:
【中文标题】Python纸牌游戏效率【英文标题】:Python card game efficiency 【发布时间】:2021-04-18 21:53:42 【问题描述】:我正在用 python 开发纸牌游戏。我已经做了一个card Class和一个deck Class。我正在使用 pygame 所以我制作了一个函数,将字符串卡片套装转换为符号以将它们显示在卡片顶部。我的问题是,在类中还是在类之外编写这些函数效率更高,为什么。谢谢!
内部:
class Card:
def __init__(self, value, suit):
self.value = value
self.suit = suit
def get_suit(self):
if self.suit == "Clubs":
return '♣'
elif self.suit == "Hearts":
return '♥'
elif self.suit == "Diamonds":
return '♦'
elif self.suit == "Spades":
return '♠'
def get_value(self):
if self.value >= 7 and self.value <= 10:
return self.value
elif self.value == 11:
return "J"
elif self.value == 12:
return "Q"
elif self.value == 13:
return "K"
elif self.value == 14:
return "A"
或外部:
def get_suit(suit):
if suit == "Clubs":
return '♣'
elif suit == "Hearts":
return '♥'
elif suit == "Diamonds":
return '♦'
elif suit == "Spades":
return '♠'
def get_value(value):
if value >= 7 and value <= 10:
return value
elif value == 11:
return "J"
elif value == 12:
return "Q"
elif value == 13:
return "K"
elif value == 14:
return "A"
class Card:
def __init__(self, value, suit):
self.value = value
self.suit = suit
【问题讨论】:
您是否有一些性能问题表明这两种方法都存在瓶颈?如果没有,您应该选择更易于维护和使用的方法。 【参考方案1】:它们应该是方法——它们与卡片本身直接相关,并且它们都使用卡片的属性:作为函数,你总是必须从对象中传递一个属性——所以为什么不将它们作为方法。
作为一个教学点,有更有效的方法来编写这些 - 我希望你不介意这些额外的信息。
您可以使用字典而不是使用 if/else(每个 if
针对每个 if 语句的单个值测试相同的属性,并且每个 if 语句返回一个简单的值 - 字典真正起作用的经典案例)。
你的方法会变成:
def get_suit(self):
return "Clubs":'♣',"Hearts":'♥',"Diamonds":'♦',"Spades":'♠'[self.suit]
def get_value(self):
return 11:"J",12:"Q",13:"K",14:"A".get(self.value,self.value)
如果您了解字典的基础知识,希望get_suit
方法应该是不言自明的。
get_value
方法使用了很多初学者都不熟悉的字典特性,即get()
方法。 get 方法有两个参数,第一个是要查找的键(在本例中为卡值),如果字典中不存在该键(这也是卡值),则默认返回。因此,在这种情况下,如果值为 11 到 14(含),则 get 方法将 J 分别返回到 A,如果值超出了 11 到 14 的范围,您将获得该值。
我希望您能看到这种使用字典的技术如何易于扩展,并且可以以多种不同的方式使用; if/else 链非常迅速地分解为多个代码行。
祝你好运。
【讨论】:
谢谢,这真的很有帮助!以上是关于Python纸牌游戏效率的主要内容,如果未能解决你的问题,请参考以下文章