#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 Какие новые моменты дает ваш ответ, который еще не был выделен в предыдущем ответе?