2012-12-08 5 views
0

개체 목록이 있습니다 (게임용). 목록 자체를 개체로 만들고 싶습니다.Python에서 목록 개체 만들기

class card (object): 
    def __init__ (self,suit,value): 
     self.suit = suit 
     self.value = value 


    def cardpointvalue(self): 
    #not relevant, basically says if card is this return this value for it 
    # there is also a __str__ function and a ___repr___ function, don't think 
    # they are important 

그래서 내 카드 개체입니다, 나는 또한 내가하는 데 문제가 어디 손 개체가 :

첫 번째 목적은 카드입니다.

class hand (object): 
    def __init__ (self,list_cards): 
     self.list_cards = list_cards 

    def hand_value (self): 
     for i in list: 
      handpointvalue += (i.cardpointvalue()) 
     return handpointvalue 

내 메인()에서 문제가있는 곳입니다.

나는 각 카드를 덱에서 카드 개체로 만드는 목록이 있습니다. 나는 list1과 list2라는 사람의 손에 그것들을 전달한다. (각 플레이어마다, list1 만 다루기로한다.)

일단 각 플레이어의 카드를 자신의 목록에 합격하면. 나는 그 손 객체에 목록을 만들고 그 위에 handpointvalue 함수를 실행하려고합니다. 나는 문제가 어디

그래서 여기

for i in range(10): 
    one_card = card_deck.pop(0) #each card is an object at this point 
    list1.append(one_card) 

print (list1) #just testing, get a list of each card object 

이다. 나는 여러 가지를 시도했다. 가장 최근의 것 :

hand(list1) 
print (list1.handpointvalue()) 

왜 이것이 작동하지 않습니까? 이 객체 목록을 객체 자체로 만드는 방법은 무엇입니까?

답변

3

먼저 변수 이름에 내장 키워드를 사용하지 마십시오 (예 : list). 두 번째로 hand.hand_value에는 udefined 변수 (handpointvalue)가 포함되어있어 작동하지 않아야합니다. 셋째, 당신도 호출하지있는 hand.hand_value() : 당신이 일을 할 이유가있는 역 추적 또는 코드를 게시하지 않은 때문에

print (list1.handpointvalue()) 
+0

오른쪽에 handpointvalue init을해야하고, 내가 아는 : 설명을 감안할 때

이 내가 당신이하려는 생각입니다 그 목록은 결코 사용되어서는 안됩니다. 사실 그것은 단지 이것을 위해서였습니다. 그래서 목록을 반복하기 시작하기 전에 handpointvalue = 0을 만들어야합니다 (손이라고 부름)? – user1887945

+0

하지만 그건 내가 가진 문제가 아닙니다. 무슨 일이 일어나고있는 건 객체가 반복 될 수 없다는 타입 오류가 발생했습니다. – user1887945

+0

"Object not Iterable"오류는'__iter __()'메소드를 구현하지 않는 객체를 반복하려고한다는 것을 의미합니다. 예를 들어'for x in 10'은 정수가 구현하지 않기 때문에 오류를 발생시킵니다. 반면에'for x in range (10)'은 목록이 반복 가능하기 때문에 잘 동작합니다 ('__iter __()'구현). http://docs.python.org/2/library/stdtypes.html#iterator-types –

1

, 당신의 문제가 3 배입니다 내기거야 : 1) 2) 당신은 객체 속성을 얻기 위해 자신을 사용하지 않고 있고, 3) 생성자가 어떻게 작동 하는지를 이해하지 못하는 것처럼 Handpoint Value라고하는 메소드가 없습니다.

cards = [card_deck.pop(0) for i in range(10)] 

class Hand(object): 
    def __init__(self, cards): 
     self.cards = cards 
    def handpointvalue(self): 
     return sum([c.cardpointvalue() for c in self.cards]) 

hand = Hand(cards) 
v = hand.handpointvalue() 
# v will now be some number, assuming you've implemented cardpointvalue correctly 
-1
class hand (object): 
    def __init__ (self,list_cards): 
     self.list_cards = list_cards 
     self.handpointvalue = "" 

    def hand_value (self): 
     for i in list: 
      self.handpointvalue += (i.cardpointvalue()) 
     return self.handpointvalue 

문제는 당신이 클래스 손이나 다른 방법

+0

포인트 값은 멤버 변수가 아닌 함수의 로컬이어야합니다 (함수를 두 번 호출하고, 두 번째 결과는 첫 번째 두 배가됩니다). 또한, 그것은 아마도 정수 값이며 문자열이 아닙니다 ... 그리고 당신은 OP가 실제로 문제가되는 것을 보지 못했습니다. 그것은 그가 올바른 기능을 부르지 않았다는 것입니다. – l4mpi