я создал класс под названием карты, которая принимает номер и дает следующий результат в зависимости от методов, вызываемых:Наследство и методы перегрузки
class Card:
def __init__(self, number):
self.number = number
def suit(self):
if self.number in range(0, 13):
return 0
elif self.number in range(13, 26):
return 1
elif self.number in range(26, 39):
return 2
elif self.number in range(39, 52):
return 3
def rank(self):
if self.number in range(0, 13):
return self.number
elif self.number in range(13, 26):
return self.number - 13
elif self.number in range(26, 39):
return self.number - 26
elif self.number in range(39, 52):
return self.number - 39
def points(self):
if self.number in (12,25,38,51):
return 4
elif self.number in (11,24,37,50):
return 3
elif self.number in (10,23,36,49):
return 2
elif self.number in (9,22,35,48):
return 1
else:
return 0
def __repr__(self):
ranks = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
if self.number in range(0, 13):
return ranks[self.number] + '\u2663'
elif self.number in range(13, 26):
return ranks[self.number - 13] + '\u2666'
elif self.number in range(26, 39):
return ranks[self.number - 26] + '\u2665'
elif self.number in range(39, 52):
return ranks[self.number - 39] + '\u2660'
def __lt__(self,other):
if str(self.rank) < str(other.rank):
return True
else:
return False
* любые советы по созданию кода лучше оценены
Теперь я должен написать класс под названием BlackjackCard с классом карты унаследована:
class BlackjackCard(Card):
def __init__(self, number):
Card.__init__(self, number)
def points(self):
if self.rank == 12:
return 11
elif self.rank in (11,10,9):
return 10
elif self.rank < 11:
return self.rank
Я пытаюсь перегружать точки() метод путем перезаписи, но я не могу показаться, чтобы осущ ement self.rank из класса Card. Когда я назначаю y = BlackjackCard(38)
и выполняю y.points()
, он дает мне type error: unorderable types: method() < int()
.
Что я здесь делаю неправильно?
Совет: повторность проверки должны ключ вам, что есть лучший путь. Как вы могли рассчитать костюм, ранг и точки с помощью математики вместо цепочки операторов if/else? (Как подсказка, попробуйте использовать операторы деления и модуля.) –
Я очень согласен, что код повторяется, но как я могу сделать его проще? Не могли бы вы привести мне пример на одном из них? –
Я вычислил математические соотношения для метода ранжирования и метода. Еще раз спасибо! –