Python卡牌游戏效率
Python card game efficiency
我正在 python 开发纸牌游戏。我已经制作了一张 卡片 Class 和一张 套牌 Class。我正在使用 pygame,所以我创建了一个函数,将字符串卡片花色转换为符号以将它们显示在卡片顶部。我的问题是,将这些函数写在 class 中还是在其外部更有效,为什么。谢谢!
里面:
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
它们应该是方法 - 它们与卡片本身直接相关,并且它们都使用卡片的属性:作为函数,无论如何你总是必须传入对象的属性 - 那么为什么不将它们作为方法。
作为教学要点,有更有效的方法来编写这些内容 - 希望您不介意这些额外信息。
而不是使用 if/else 您可以使用字典(每个 if
针对每个 if 语句针对单个值测试相同的属性,每个 if 语句 return 是一个简单的值 - 一个经典案例字典真正起作用的地方)。
您的方法将变为:
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 方法有两个参数,第一个是要查找的键(在本例中是卡片值),如果字典中不存在该键(也是卡片值),则默认为 return .因此,在这种情况下,如果值是 11 到 14,分别包含 get 方法 returns J 到 A,如果值超出 11 到 14 范围,您将获得该值。
我希望你能看到这种使用字典的技术如何易于扩展,并以多种不同的方式使用; if/else 链很快爆炸成多行代码。
祝你好运。
我正在 python 开发纸牌游戏。我已经制作了一张 卡片 Class 和一张 套牌 Class。我正在使用 pygame,所以我创建了一个函数,将字符串卡片花色转换为符号以将它们显示在卡片顶部。我的问题是,将这些函数写在 class 中还是在其外部更有效,为什么。谢谢!
里面:
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
它们应该是方法 - 它们与卡片本身直接相关,并且它们都使用卡片的属性:作为函数,无论如何你总是必须传入对象的属性 - 那么为什么不将它们作为方法。
作为教学要点,有更有效的方法来编写这些内容 - 希望您不介意这些额外信息。
而不是使用 if/else 您可以使用字典(每个 if
针对每个 if 语句针对单个值测试相同的属性,每个 if 语句 return 是一个简单的值 - 一个经典案例字典真正起作用的地方)。
您的方法将变为:
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 方法有两个参数,第一个是要查找的键(在本例中是卡片值),如果字典中不存在该键(也是卡片值),则默认为 return .因此,在这种情况下,如果值是 11 到 14,分别包含 get 方法 returns J 到 A,如果值超出 11 到 14 范围,您将获得该值。
我希望你能看到这种使用字典的技术如何易于扩展,并以多种不同的方式使用; if/else 链很快爆炸成多行代码。
祝你好运。