Null возвращается в простой программе на Python - PullRequest
0 голосов
/ 12 мая 2018

В настоящее время я работаю над своим финальным проектом по основам программирования с Python, который представляет собой набор небольших игр. Я пытаюсь сделать игру «Старшей картой», в которой генерируются 2 случайных числа от 1 до 13 (номиналы колоды из 52 карт), затем сравниваются для более высокого числа и отображается победитель.

Мы должны иметь отдельные файлы для кода класса и программы. Вот так выглядит мой класс.

import random

class card:
    def __init__(self, value):
        self.card_value = value

    def deal(self):
        numb = random.randrange(1, 13)

    def set_value(self, value):
        self.card_value = value

    def get_value(self):
        return self.card_value

    def find_face_value(self, numb):
        #face = 'test'
        print(numb)
        if numb == 1:
            print("numb == 1")
            return 'Ace'
        elif numb == 2:
            return 'two'
    ##        elif numb == 3:
    ##            face = 'three'
    ##        elif numb == 4:
    ##            face = 'four'
    ##        elif numb == 5:
    ##            face = 'five'
    ##        elif numb == 6:
    ##            face = 'six'
    ##        elif numb == 7:
    ##            face = 'seven'
    ##        elif numb == 8:
    ##            face = 'eight'
    ##        elif numb == 9:
    ##            face = 'nine'
    ##        elif numb == 10:
    ##            face = 'ten'
    ##        elif numb == 11:
    ##            face = 'jack'
    ##        elif numb == 12:
    ##            face = 'queen'
    ##        elif numb == 13:
    ##            face = 'king'
        #return face

    def __str__(self):
        return 'Numeric Value: ' + str(self.card_value)

Я прокомментировал эти (если онемел = = ...) утверждения b / c, которые я тестирую, чтобы узнать, смогу ли я получить один правильный возврат. А вот и мой программный код для игры.

def high_card():
    #player1_card = cardClass.card(random.randrange(1, 13))
    player1_card = cardClass.card(1)
    player2_card = cardClass.card(2)
    card1 = player1_card.find_face_value(player1_card)
    #player2_card = cardClass.card(random.randrange(1, 13))
    card2 = player2_card.find_face_value(player2_card)
    print('Player 1 got', card1, player1_card, '\nPlayer 2 got', card2, player2_card)

И это вывод, который я получаю, когда запускаю функцию high_card ().

>>> high_card()
Numeric Value: 1
Numeric Value: 2
Player 1 got None Numeric Value: 1 
Player 2 got None Numeric Value: 2

Моя проблема в последних 2 строках вывода. Должно быть сказано: «Игрок 1 получил числовое значение Ace: 1» и «Игрок 2 получил числовое значение Ace: 2». Мне нужна функция find_face_value в моем классе, чтобы вернуть строку "лица" карты. Вместо этого Python печатает «None», подразумевая, что я ничего не возвращал внутри функции find_face_value. Я нахожусь в тупике, что нужно сделать, чтобы это работало, и буду очень признателен за помощь.

1 Ответ

0 голосов
/ 12 мая 2018
card1 = player1_card.find_face_value(player1_card)

В приведенном выше утверждении numb не является ни 1, ни 2. numb является классом карты (вам назначена numb = player1_card). Таким образом, операторы if внутри find_face_value являются ложными, поэтому возвращаемые значения пропускаются. Python возвращает None по умолчанию. Вы должны проверить self.card_value внутри операторов if вместо проверки numb.

def find_face_value(self):
    if self.card_value == 1:
        print("card value is 1")
        return 'Ace'
    elif self.card_value == 2:
        return 'two'


card1 = player1_card.find_face_value()
print(card1)

В приведенном выше утверждении должно быть напечатано 'Ace'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...