Как проверить, имеют ли несколько возвращаемых объектов класса одно и то же значение для сравнения и редактировать толькPython

Программы на Python
Anonymous
Как проверить, имеют ли несколько возвращаемых объектов класса одно и то же значение для сравнения и редактировать тольк

Сообщение Anonymous »

В настоящее время я создаю карточную игру в блэкджек, используя ООП и благословенную библиотеку. В нынешнем виде я создаю объекты карточек, которые возвращают мне объект класса:

Код: Выделить всё

player_card_data = [, ]
Затем я могу углубиться в них и получить значение карты:

Код: Выделить всё

player_card_data[0].card_value
Это, например, дает мне 10.
Моя текущая проблема заключается в том, что я хочу учитывать тузы, которые ранее в моей программе я установил на значение 11. Мне нужно проверить и посмотреть, каков счет, чтобы рука не обанкротилась автоматически, вытянув 2 туза (22). В настоящее время я встраиваю это в функцию многократного использования и полагаю, что мне нужно будет сделать простой оператор сравнения.
(Это то, что я сейчас пытаюсь/пробовал, но пока безрезультатно.)

Код: Выделить всё

def calculate_score(player_card_data):
"""
Calculates the score of the players cards, accounting for aces, then returns the score
"""
if player_card_data[0].card_value == player_card_data[1].card_value:
player_card_data[0].card_value = 1

player_score = player_card_data[0].card_value + player_card_data[1].card_value
return player_score
Проблема, которую я вижу в этом, хотя она работает с двумя картами, она не масштабируется и полностью ломается, если в объекте player_card_data находится более 3 карт. Я думал об использовании *args, но не уверен, сработает ли это/не смог заставить его работать в этой ситуации. Я не собираюсь превращать его в набор, так как мне нужны оба значения для сложения позже в функции.
Объекты карт изначально заполняются в массив колоды, из которого затем рисуются карты. из, а затем удален из этой колоды. Это гарантирует, что объекты, которыми я манипулирую, существуют только в течение текущего раунда блэкджека и, как следствие, не влияют на колоду, поскольку после текущего раунда они больше не существуют. Я знаю, что манипулирование объектами, как правило, является плохой практикой, но если объект больше не существует после завершения раунда, это не является серьезной проблемой.
Я делаю это таким образом, чтобы создать конечное число игр, прежде чем колоду нужно будет «перетасовать» (пересоздать).
Данные, которые вводятся для создания объектов карты, размещаются вне класса карты внутри объектов и массивов:

Код: Выделить всё

suits = ["Spades", "Hearts", "Clubs", "Diamonds"]
suits_values = {"Spades":"\u2664", "Hearts":"\u2661", "Clubs": "\u2667", "Diamonds": "\u2662"}
cards = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
cards_values = {"A": 11, "2":2, "3":3, "4":4, "5":5, "6":6, "7":7, "8":8, "9":9, "10":10, "J":10, "Q":10, "K":10}
который затем отправляется в класс карты и заполняется в колоде, чтобы создать 52 уникальных объекта карты:

Код: Выделить всё

def create_deck():
"""
Creates a new deck of 52 card objects by passing each card suit, card and card value
into the Card class, then appending it to the deck array.
"""
# we now create our deck of cards
deck = []
# Loop for every type of suit
for suit in suits:
cards = ["A", "A", "A", "A"]
# Loop for every type of card in a suit
for card in cards:
# Adding card to the deck
deck.append(Card(suits_values[suit], card, cards_values[card]))

return deck
Карты, однажды «вытянутые» в раунде, полностью удаляются из колоды. Я ищу способ подсчитать счет на основе того, вытягивает ли игрок или процессор несколько «тузов» ( 11) карточные предметы. Я делаю это, потому что хочу нарисовать карты на терминале с благословением позже, поэтому мне нужно сохранить их в объекте для доступа позже.
Как мне сделать это масштабируемым? на любое количество карт?

Подробнее здесь: https://stackoverflow.com/questions/789 ... for-compar

Вернуться в «Python»