Python 类和If语句

Python 类和If语句,python,class,Python,Class,我试图通过让它检查卡片是否在特殊列表中找到,来给杰克赋值11,给女王赋值12,给国王赋值13。这是行不通的。我不知道我做错了什么,也不知道怎么做。你可以使用这样的列表 def get_value(self): """Get the value on the face card: (Jack=11, Queen=12, King = 13), Ace = 1, others are face value 2-10""" #List that

我试图通过让它检查卡片是否在特殊列表中找到,来给杰克赋值11,给女王赋值12,给国王赋值13。这是行不通的。我不知道我做错了什么,也不知道怎么做。

你可以使用这样的列表

def get_value(self):
        """Get the value on the face card:
           (Jack=11, Queen=12, King = 13), Ace = 1, others are face value 2-10"""

        #List that contains all the face cards that have a special value
        specialJ = ['J']
        specialK = ['K']
        specialQ = ['Q']

        #If the card is a jack, king, or queen, set the return value to 11,13,12
        if self.rank in specialJ:
            int_rank = '11'
        elif self.rank in specialK:
            int_rank = '13'
        elif self.rank in specialQ:
            int_rank = '12'
        #If the card is an ace, set the return value to 1
        elif self.rank == 'A':
            #Set the return value of the card to 1
            int_rank = '1'
        #If the card is not a face card, keep the same return value.
        else:
            int_rank = self.rank
更好的是,如果你想经常访问它,字典将提供更快的查找

def get_value(self):
    my_cards = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
    return my_cards.index(self.rank) + 1

做这件事的最佳方法

你说的不起作用是什么意思?发生了什么事?你收到错误信息了吗?您可以向我们展示不同于其应有的可见行为吗?如果卡是杰克、国王或女王,则您的注释将返回值设置为12与您的代码实际执行的操作不匹配。另外,为什么要在中使用列表和?为什么不只是self.rank='J'?你记得要返回什么吗?如果这是您的整个函数,那么您的函数实际上什么都不做。它分配了一个在单个函数调用外不可见的局部int_rank变量,当函数返回时该变量消失。另外,我做过几次纸牌游戏,我使用self.rank作为整数1=a,2-10,11=J,12=Q,13=K,并定义str返回人类可读的秩。这样我就可以处理手中的卡片了:没有任何混乱的printcard。@codehorse根据问题,它只有11、12和13:
def get_value():
    my_cards = {'A': 1, '10': 10, 'K': 13, 'J': 11, 'Q': 12, '3': 3, '2': 2, '5': 5, '4': 4, '7': 7, '6': 6, '9': 9, '8': 8}
    return my_cards.get(self.rank, -1)
def get_value():
    my_cards = {'A': 1, '10': 10, 'K': 13, 'J': 11, 'Q': 12, '3': 3, '2': 2, '5': 5, '4': 4, '7': 7, '6': 6, '9': 9, '8': 8}
    return my_cards.get(self.rank, -1)