Функция, не определенная в классе

#python-3.x #class

#python-3.x #класс

Вопрос:

У меня возникли проблемы с проектом кодирования, в котором я пытаюсь использовать классы на python для создания карточной игры (чит). Однако при создании класса player одна из функций, которая была ранее определена в классе, отображается как неопределенная. Я не могу понять причину, и любое предложение приветствуется. Ниже приведено определение классов

 class card(object):
  def __init__(self,rank,suit):
    self.rank = rank
    self.suit = suit

class player(object):
  def __init__ (self):
    self.number = number
    self.hand = list()
    #Here, hand is a list of the card class that was distributed with a suit and a rank
  def check_card(self,player_rank,player_suit):
    for card in self.hand:
      if card.rank == player_rank and card.suit == player_suit:
        return True
        break
    return False
  def play_card(self):
    suit = input('what is the suit?')
    rank = input('what is the rank?')
    if check_card(self,rank,suit):
      print(True)
    else:
      print(False)
 

Вот фактический код, который ее запустит

 player = player()
player.play_card()
 

Была получена следующая ошибка:

 NameError: name 'check_card' is not defined
 

Я устранял неполадки и рассматривал различные решения, включая перемещение функций за пределы класса, но он продолжает отображать ту же ошибку. Кто-нибудь может указать на ошибку? Спасибо!

Комментарии:

1. При player = player() этом вы переопределяете символ player .

2. Кроме того, обычно имена классов начинаются с заглавных букв.

3. Спасибо за предложение синтаксиса, я буду следить за этим в следующий раз!

Ответ №1:

В вашем коде есть следующие две проблемы

  • Способ, которым вы передали self check_card функции, неверен. Вы должны вызвать ее таким образом
 self.check_card(rank,suit)
 
  • Вторая проблема заключается в том, что число не определено. Таким образом, я передал ее в качестве аргумента при инициализации проигрывателя. Не стесняйтесь вносить изменения для этого.

Это исправленный код :

 class card(object):
  def __init__(self,rank,suit):
    self.rank = rank
    self.suit = suit

class player(object):
  def __init__ (self, number):
    self.number = number
    self.hand = list()
    #Here, hand is a list of the card class that was distributed with a suit and a rank
  def check_card(self,player_rank,player_suit):
    for card in self.hand:
      if card.rank == player_rank and card.suit == player_suit:
        return True
        break
    return False
  def play_card(self):
    suit = input('what is the suit?')
    rank = input('what is the rank?')
    if self.check_card(rank,suit):
      print(True)
    else:
      print(False)


player = player(3)
player.play_card()
 

Вывод :

 what is the suit?spade
what is the rank?3
False
 

Ответ №2:

На основе этого документа вызов функции в классе python является self.xxxx(args) (xxxx обозначается именем функции), поэтому правильная версия функции play_card показана следующим образом.

 enter code here
def play_card(self):
    suit = input('what is the suit?')
    rank = input('what is the rank?')
    if self.check_card(rank,suit):
        print(True)
    else:
        print(False)
 

Комментарии:

1. Здравствуйте. @Behnam Какие новые моменты дает ваш ответ, который еще не был выделен в предыдущем ответе?