Как заставить функцию класса возвращать букву вместо числа? - PullRequest
0 голосов
/ 05 августа 2020

Хорошо, я реализовал свой код ниже. Желаемый результат будет:

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)

Ответы [ 2 ]

7 голосов
/ 05 августа 2020
    letters = {1:'A', 11:'J', 12:'Q', 13:'K'}
    if self.rank in letters:
        rank_show = self.rank
    else:
        rank_show = self.rank

Вы забыли изменить значение show: вы делаете то же самое в обеих ветках. Вместо этого ...

    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]

Обратите внимание на отсутствие 'if ' заявление; вы просто индексируете список значений. Если вы хотите включить «10» вместо «T», вы можете использовать вместо этого список строк:

    rank_char = ["", "A", "2", ... "10", "J", "Q", "K"]
0 голосов
/ 05 августа 2020

Это небольшая ошибка. Вы получаете доступ к числовому значению 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

Другой способ сделать это - использовать метод 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...