-2

我正在用python开发纸牌游戏。我已经制作了一张卡片 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
4

1 回答 1

0

它们应该是方法——它们与卡片本身直接相关,并且它们都使用卡片的属性:作为函数,你总是必须从对象中传递一个属性——所以为什么不将它们作为方法。

作为教学点,有更有效的方法来编写这些 - 我希望你不介意这些额外的信息。

您可以使用字典而不是使用 if/else(每个ifif 语句针对单个值测试相同的属性,并且每个 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 链非常迅速地分解为多个代码行。

祝你好运。

于 2021-01-13T21:06:36.823 回答