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

Масть я бы тоже сделал свойством. Был бы один класс :)
nickmetal
я не понимаю, как создать эту самую колоду. Я могу, например, создать список с отдельновзятыми атрибутами, но это уже, как по мне, каламбур
GaiveR
Так создайте класс “Колода” с атрибутом-списком “карты” и методами “перемешать”, “достать карту сверху” и т.д.

Ну и в вашем случае я не вижу смысла в 4-х классах с одинаковыми атрибутами. Логичнее выглядит один класс “Карта” с атрибутами “масть” и “достоинство”
nickmetal
спасибо за наводку, будем работать)
sergeek
nickmetal
Clovers
clubs же
nickmetal
Valet
и Jack, ага. Не кружок английского, но все же
алсо копипаст есть моветон. Я перебирал так:
from itertools import  product
for value,suit in product('23456789TJQKA','shdc'):
    print(value,suit)
nickmetal
sergeek
Я перебирал так:
from itertools import product
for value,suit in product('23456789TJQKA','shdc'):
print(value,suit)

а что значит этот код?
sergeek
ну чтобы вместо
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')]
nickmetal
вау, прикольный способ. Спасибо
nickmetal
Вот опять не пойму, как быть:
в ооп- программах объекты взаимодействуют через методы, с ними вроде обращаются через методы.
Я вот написал метод 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 не объект, а список обьектов
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB