Форум сайта python.su
Здравствуйте! Чтобы немного попрактиковаться в ООП-питоне, хочу написать игру карты(дурак). Пошел по такому пути, хотя мне он сам не нравится, но лучше в голову не идет. Хочу спросить, как реализовать момент, когда создается колода карт из обьектов-карт, чтобы сохранились их атрибуты для дальшейших операций?
создал 36 карт-обьеков от классов-мастей. Ну, и,пока, имеются 3 атрибута. Имя, значение карты, чтобы потом сравнивать, какая карта “больше”, и “козырь=0”, когда еще не известно, какой козырь
class Hearts: def __init__(self,name, card_value,trump=0): self.trump = trump self.name = str(name) self.card_value = card_value class Diamonds: def __init__(self,name, card_value,trump=0): self.trump = trump self.name = str(name) self.card_value = card_value class Clovers: def __init__(self,name, card_value,trump=0): self.trump = trump self.name = str(name) self.card_value = card_value class Spades: def __init__(self,name, card_value,trump=0): self.trump = trump self.name = str(name) self.card_value = card_value h6_card=Hearts('h6',1) h7_card=Hearts('h7',2) h8_card=Hearts('h8',3) h9_card=Hearts('h9',4) h10_card=Hearts('h10',5) hV_card=Hearts('h_Valet',6) hQ_card=Hearts('h_Queen',7) hK_card=Hearts('h_King',8) hA_card=Hearts('h_Ace',9) d6_card=Diamonds('d6',1) d7_card=Diamonds('d7',2) d8_card=Diamonds('d8',3) d9_card=Diamonds('d9',4) d10_card=Diamonds('d10',5) dV_card=Diamonds('d_Valet',6) dQ_card=Diamonds('d_Queen',7) dK_card=Diamonds('d_King',8) dA_card=Diamonds('d_Ace',9) c6_card=Clovers('c6',1) c7_card=Clovers('c7',2) c8_card=Clovers('c8',3) c9_card=Clovers('c9',4) c10_card=Clovers('c10',5) cV_card=Clovers('c_Valet',6) cQ_card=Clovers('c_Queen',7) cK_card=Clovers('c_King',8) cA_card=Clovers('c_Ace',9) s6_card=Spades('s6',1) s7_card=Spades('s7',2) s8_card=Spades('s8',3) s9_card=Spades('s9',4) s10_card=Spades('s10',5) sV_card=Spades('s_Valet',6) sQ_card=Spades('s_Queen',7) sK_card=Spades('s_King',8) sA_card=Spades('s_Ace',9)
Офлайн
А что, сейчас не сохраняются?
Масть я бы тоже сделал свойством. Был бы один класс :)
Отредактировано Soteric (Янв. 18, 2013 19:46:31)
Офлайн
я не понимаю, как создать эту самую колоду. Я могу, например, создать список с отдельновзятыми атрибутами, но это уже, как по мне, каламбур
Офлайн
Так создайте класс “Колода” с атрибутом-списком “карты” и методами “перемешать”, “достать карту сверху” и т.д.
Ну и в вашем случае я не вижу смысла в 4-х классах с одинаковыми атрибутами. Логичнее выглядит один класс “Карта” с атрибутами “масть” и “достоинство”
Офлайн
спасибо за наводку, будем работать)
Офлайн
nickmetalclubs же
Clovers
nickmetalи Jack, ага. Не кружок английского, но все же
Valet
from itertools import product for value,suit in product('23456789TJQKA','shdc'): print(value,suit)
Отредактировано sergeek (Янв. 18, 2013 21:26:52)
Офлайн
sergeek
Я перебирал так:
from itertools import product
for value,suit in product('23456789TJQKA','shdc'):
print(value,suit)
Офлайн
ну чтобы вместо
h6_card=Hearts('h6',1) h7_card=Hearts('h7',2) h8_card=Hearts('h8',3) h9_card=Hearts('h9',4) h10_card=Hearts('h10',5) hV_card=Hearts('h_Valet',6) hQ_card=Hearts('h_Queen',7) hK_card=Hearts('h_King',8) hA_card=Hearts('h_Ace',9) d6_card=Diamonds('d6',1) d7_card=Diamonds('d7',2) d8_card=Diamonds('d8',3) d9_card=Diamonds('d9',4) d10_card=Diamonds('d10',5) dV_card=Diamonds('d_Valet',6) dQ_card=Diamonds('d_Queen',7) dK_card=Diamonds('d_King',8) dA_card=Diamonds('d_Ace',9) c6_card=Clovers('c6',1) c7_card=Clovers('c7',2) c8_card=Clovers('c8',3) c9_card=Clovers('c9',4) c10_card=Clovers('c10',5) cV_card=Clovers('c_Valet',6) cQ_card=Clovers('c_Queen',7) cK_card=Clovers('c_King',8) cA_card=Clovers('c_Ace',9) s6_card=Spades('s6',1) s7_card=Spades('s7',2) s8_card=Spades('s8',3) s9_card=Spades('s9',4) s10_card=Spades('s10',5) sV_card=Spades('s_Valet',6) sQ_card=Spades('s_Queen',7) sK_card=Spades('s_King',8) sA_card=Spades('s_Ace',9)
class Card: ... cards = [Card(value,suit) for value,suit in product('23456789TJQKA','shdc')]
Офлайн
вау, прикольный способ. Спасибо
Офлайн
Вот опять не пойму, как быть:
в ооп- программах объекты взаимодействуют через методы, с ними вроде обращаются через методы.
Я вот написал метод shuffled() чтобы перемешать колоду карт.
Но при попытке вызвать этот метод, программа выдает ошибку ( код ошибки под кодом)
from random import randint import random from itertools import product class Cards: def __init__(self,name,suit,trump=0): self.trump = trump self.name = name self.suit=suit def shuffled(self): random.shuffle(self) cards = [Cards(name,suit) for name,suit in product('6789TJQKA',['hearts','diamonds','clubs','spades'])] >>> cards.shuffled() Traceback (most recent call last): File "<pyshell#0>", line 1, in <module> cards.shuffled() AttributeError: 'list' object has no attribute 'shuffled'
Офлайн