2016-04-02 19 views
1

Bu, MATLAB olmayan ilk programlama dilimdir, bu yüzden nesne yönelimli programlamada sorun yaşıyorum. Özellikle, bir blackjack oyunu simüle eden bir program üzerinde çalışıyorum. İşleyişe devam ediyor ancak oyuncularınÖzellik Yönlendirmeli Nesne Yönelimli Programlama

'u yapmasına izin vermesi için bazı yeni özelliklerin işlevselliği ekledim. Anlamak gerekirse, BJ Player bir dizi kart nesnesi olan bir nesnedir. Def_init sadece kendini ve isimleri parametre olarak kullanırdı, fakat startmonileri ekledim (oyuncuya bahis oynaması parayla başlıyordu.) BJ oyuncunun süper sınıfı en sonunda BJ elidir. Şimdi bu el için bir kart eklemek için bir yöntem çağrıldığında bir hata alıyorum. Aşağıda nerede

class BJ_Game(object): 
""" A Blackjack Game. """ 
def __init__(self, names, startingmonies):  
    self.players = [] 
    for name in names: 
     player = BJ_Player(name) 
     spot = names.index(name) 
     startingscratch = startingmonies[spot] 
     player_with_money = (name, startingscratch,0) 
     self.players.append(player_with_money) 

budur o hata nerede (yukarıda kullanılan BJ modülüne aktarılır kartlar modülü) hata kaynaklanır: Bu benim .: olsun hatadır

class Hand(object): 
""" A hand of playing cards. """ 
def __init__(self): 
    self.cards = [] 

def __str__(self): 
    if self.cards: 
     rep = "" 
     for card in self.cards: 
      rep += str(card) + "\t" 
    else: 
     rep = "<empty>" 
    return rep 

def clear(self): 
    self.cards = [] 

def add(self, card): 
    self.cards.append(card) 

def give(self, card, other_hand): 
    self.cards.remove(card) 
    other_hand.add(card) 

satır 47, vermek other_hand.add (kart)

AttributeError: 'tanımlama grubu' nesne hiçbir özelliği 'ni ekleyin'

bu er olsun sahiptir kartları işlemeye çalışırken ror. Yaptığım tek gerçek değişiklik, bahis parametresini ekleyebilmek için her şeyden önce çalıştı. Bu konuyu araştırdım ve güçlü bir anlayış elde edemedim. Herhangi bir yardım büyük takdir edilecektir. Teşekkür ederim!

Bazı daha fazla bilgi burada. Hatanın gerçekleştiğini düşünüyorum çünkü self.players'ı bir tupl listesi olarak değiştirdim. Bunu nasıl düzelteceğimi bilmiyorum.

for index, player in enumerate(self.players): 
     flag = 1 
     while flag: 
      try: 
       (name, players_cache,bet) = player 
       print(players_cache) 
       print("Current player:",name) 
       bet = int(input("Please select how much this player would like to wager: ")) 
       if bet <= 0: 
        print("Bet must be greater than 0") 
       elif bet <= players_cache: 
        flag = 0 
        players_cache-=bet 
        player = (name,players_cache,bet) 
        self.players[index] = player 
       else: 
        print("Insufficient funds. PLayer only has",players_cache,"dollars available") 
      except ValueError: 
       print("Input must be a number\n") 


    # deal initial 2 cards to everyone 
    self.deck.deal(self.players + [self.dealer], per_hand = 2) 

Buradaki hatanın başka bir bölümünü alıyorum. hat 169, oyunda self.deck.deal (self.players + [self.dealer], per_hand = 2)

Tam hata bloku İşte. Maalesef önce değil tümü gösteren: oyun self.deck.deal içinde ana game.Play (max_Cards) hattı 169, içinde, ana() hattı 258,

hattı 262 (self.players anlaşma self.give içinde + [self.dealer] per_hand = 2) çizgisi 65, (top_card, el) hattı 47 içinde vermek other_hand.add (kart) AttributeError: 'demet' nesnesi özniteliği 'var add '

cevap

0

add yönteminin neden tanımlanmadığını açıklayan bir Hand örneği yerine tuple nesnesini give yöntemine geçirebilirsiniz. Kodunuzda yöntem verme çağrısından bahsetmediğinizden, işaretçiyi tam çizgiye veremedim.

+0

hat 65, anlaşmada self.give (top_card, hand) –

0

Hatada görüldüğü gibi, other_hand bir tuple olmalıdır, böylece add() bunu kullanamazsınız vaka. Tuplelar kod tarafından değiştirilemez, kodu yapan kişi tarafından doğrudan değiştirilmelidir. Temelde

tuple = (var1, var2, ..., varx) 

bir liste ama parantez ile ve kod tarafından değiştirilemez: Bir demet böyledir. Yani, bunun yerine other_hand'un bir liste olduğundan emin olmalısınız.

+0

Sanırım tuple'lar ve listeler arasındaki farkı anlıyorum ama neden bunun daha önce çalıştığını anlamıyorum ve şimdi değil –

0

Yardımlarınız için teşekkürler millet!Bahisleri bahis olarak değiştirdi ve problemimi çözdü.

İlgili konular