Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 18, 2013 19:25:59

nickmetal
Зарегистрирован: 2012-11-15
Сообщения: 49
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

Здравствуйте! Чтобы немного попрактиковаться в ООП-питоне, хочу написать игру карты(дурак). Пошел по такому пути, хотя мне он сам не нравится, но лучше в голову не идет. Хочу спросить, как реализовать момент, когда создается колода карт из обьектов-карт, чтобы сохранились их атрибуты для дальшейших операций?
создал 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)

Офлайн

#2 Янв. 18, 2013 19:44:56

Soteric
От:
Зарегистрирован: 2010-09-19
Сообщения: 352
Репутация: +  20  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

А что, сейчас не сохраняются?

Масть я бы тоже сделал свойством. Был бы один класс :)



Отредактировано Soteric (Янв. 18, 2013 19:46:31)

Офлайн

#3 Янв. 18, 2013 19:47:01

nickmetal
Зарегистрирован: 2012-11-15
Сообщения: 49
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

я не понимаю, как создать эту самую колоду. Я могу, например, создать список с отдельновзятыми атрибутами, но это уже, как по мне, каламбур

Офлайн

#4 Янв. 18, 2013 20:09:28

GaiveR
От:
Зарегистрирован: 2011-08-13
Сообщения: 122
Репутация: +  16  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

Так создайте класс “Колода” с атрибутом-списком “карты” и методами “перемешать”, “достать карту сверху” и т.д.

Ну и в вашем случае я не вижу смысла в 4-х классах с одинаковыми атрибутами. Логичнее выглядит один класс “Карта” с атрибутами “масть” и “достоинство”



Офлайн

#5 Янв. 18, 2013 20:14:27

nickmetal
Зарегистрирован: 2012-11-15
Сообщения: 49
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

спасибо за наводку, будем работать)

Офлайн

#6 Янв. 18, 2013 20:53:05

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

nickmetal
Clovers
clubs же
nickmetal
Valet
и Jack, ага. Не кружок английского, но все же
алсо копипаст есть моветон. Я перебирал так:
from itertools import  product
for value,suit in product('23456789TJQKA','shdc'):
    print(value,suit)

Отредактировано sergeek (Янв. 18, 2013 21:26:52)

Офлайн

#7 Янв. 19, 2013 18:08:56

nickmetal
Зарегистрирован: 2012-11-15
Сообщения: 49
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

sergeek
Я перебирал так:
from itertools import product
for value,suit in product('23456789TJQKA','shdc'):
print(value,suit)

а что значит этот код?

Офлайн

#8 Янв. 19, 2013 18:16:18

sergeek
Зарегистрирован: 2012-06-26
Сообщения: 470
Репутация: +  43  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

ну чтобы вместо

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')]

Офлайн

#9 Янв. 19, 2013 18:27:51

nickmetal
Зарегистрирован: 2012-11-15
Сообщения: 49
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

вау, прикольный способ. Спасибо

Офлайн

#10 Янв. 22, 2013 21:48:04

nickmetal
Зарегистрирован: 2012-11-15
Сообщения: 49
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужен совет по решению задачи (ООП)

Вот опять не пойму, как быть:
в ооп- программах объекты взаимодействуют через методы, с ними вроде обращаются через методы.
Я вот написал метод 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'

Подскажите, пожалуйста, как реализовать перетасовку карт?
Я понял ток, что cards не объект, а список обьектов

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version