如何让类函数返回字母而不是数字?

2024-06-12 02:13:04 发布

您现在位置:Python中文网/ 问答频道 /正文

好的,我已经实现了下面的代码。想要的结果是:

Card Q Hearts, Card 9 Hearts, Card 7 Spades

相反,结果是:

Card 12 Hearts, Card 9 Hearts, Card 7 Spades

我知道错误在if语句中的某个地方,但我不知道该如何修复它。有人能帮我吗?谢谢

import random
class Card:
    ranks = range(1, 14)
    suits = ['Diamonds', 'Spades', 'Clubs', 'Hearts']

    def __init__(self):
        self.rank = random.choice(Card.ranks)
        self.suit = random.choice(Card.suits)

    def change(self):
        self.rank = random.choice(Card.ranks)
        self.suit = random.choice(Card.suits)

    def __repr__(self):
        letters = {1:'A', 11:'J', 12:'Q', 13:'K'}
        if self.rank in letters:
            rank_show = self.rank
        else:
            rank_show = self.rank
        return "Card " + str(rank_show) + " " + self.suit

random.seed(1235)
card_1 = Card()
print(card_1)
card_2 = Card()
print(card_2)
card_2.change()
print(card_2)

Tags: selfifdefshowrandomcardprintsuit
2条回答

这是一个小错误。您正在访问self.rank的数值,即使您有一个映射相应字母表的字典。要解决这个问题,只需使用self.rank作为字典的键

def __repr__(self):
        letters = {1:'A', 11:'J', 12:'Q', 13:'K'}
        if self.rank in letters:
            rank_show = letters[self.rank] #change here - using self.rank as the key for letters
        else:
            rank_show = self.rank
        return "Card " + str(rank_show) + " " + self.suit

另一种方法是使用dictionary数据类型的get()方法

def __repr__(self):
    letters = {1:'A', 11:'J', 12:'Q', 13:'K'}
    if self.rank in letters:
        rank_show = letters.get(self.rank) #change here - use letters.get
    else:
        rank_show = self.rank
    return "Card " + str(rank_show) + " " + self.suit
    letters = {1:'A', 11:'J', 12:'Q', 13:'K'}
    if self.rank in letters:
        rank_show = self.rank
    else:
        rank_show = self.rank

您忘记更改显示值:在两个分支中执行相同的操作。相反

    if self.rank in letters:
        rank_show = letters[self.rank]

更好的是,确保返回值的类型一致:只需将它们全部设置为字符:

    rank_char = " A23456789TJQK"   # 'T' for 10 is common for consistent formatting
    rank_show = rank_char[self.rank]

注意缺乏“如果”陈述;您只需为值列表编制索引。如果希望包含“10”而不是“T”,则可以使用字符串列表:

    rank_char = ["", "A", "2", ... "10", "J", "Q", "K"]

相关问题 更多 >