2016-11-04 7 views
3

두 개의 개별 덱으로 카드 덱을 나눌 수 있도록 여러 번 클래스 메서드를 반복하고 싶습니다. 내가 d1=Deck() 다음에 deck1 = d1.deal()*26에 추가하여 [: 26] 및 [26 :] (분명히 목록에만 해당)을 시도했지만 둘 다 작동하지 않았습니다. 방금 클래스를 만드는 법을 배웠습니다.파이썬에서 클래스 메서드 반복하기

원하는 출력은 deck1=["""26 random cards"""]deck2=["""26 random cards"""]입니다.

관련 코드는 : 당신이 작업을 특정 횟수를 반복 할 때마다

import random 
suits = ['H','C','S','D'] 
ranks = ['A']+list(map(str,range(2,10)))+['X','J','Q','K'] 
values = [14]+list(range(2,14)) 

class Card: 
    def __init__(self,suit,rank): 
     self.suit=suit 
     self.rank=rank 
     self.value=values[ranks.index(self.rank)] 

    def __str__(self): 
     return "*------*\n|{0}{1} |\n|  |\n| {0}{1}|\n*------*".format(self.rank,self.suit) 

    def __gt__(self,other): 
     return self.value > other.value 

    def __lt__(self,other): 
     return self.value < other.value 

    def __eq__(self,other): 
     return self.value == other.value 

class Deck: 
    """This class is for creating deck""" 
    def __init__(self): 
     self.deck=[] 
     for suit in suits: 
      for rank in ranks: 
       self.deck.append(Card(suit,rank)) 
     self.shuffle() 

    def __str__ (self): 
     tmp='' 
     for card in self.deck: 
      tmp+=str(card)+'\n' 
     return tmp 

    def shuffle(self): 
     random.shuffle(self.deck) 

    def deal(self): 
     return self.deck.pop() 

답변

4

그래서 작업 순서는 함수를 한 번 실행 한 다음 결과를 26 번 반복합니다. 아마도 다음과 같은 것을 원할 것입니다 :

deck1 = [d1.deal() for _ in range(26)] 
+0

감사합니다! 패트릭의 대답보다 간단합니다. –

1

하는 for 루프를 사용합니다.

d2 = [] 
for i in range(26): 
    d2.append(d1.deal()) 

현재 빈 데크를 만드는 방법은 없습니다. 아마도 빈 갑판을 만들고 전체 갑판을 만들기위한 별도의 방법을 만드는 __init__을 가지고 있어야할까요? 그냥 생각.

+0

그걸 알고 있었음에 틀림 없습니다! 예, 저는 제 3의 클래스를 구현하려고합니다. 거기에있는 __init__에 덱을 만드는 것을 통합 할 것입니다. 고맙습니다! –

관련 문제