Saya belajar Python dan mencoba menulis permainan kartu simulasi namun saya menghadapi masalah dan saya tidak tahu apa yang saya lakukan salah.

Saya telah mendefinisikan 3 kelas: Kartu, Tangan dan Dek seperti di bawah ini:

Kartu:

class Card(object):

    def __init__(self, suit, pip):
        self.suit = suit
        self.pip = pip

    def __str__(self):
        return self.suit + self.pip

    def get_suit(self):
        return self.suit

    def get_pip(self):
        return self.pip

Tangan:

class Hand(object):

    def __init__(self, cards = []):
        self.cards = cards

    def __str__(self):

        hand_cards = ''

        for card in self.cards:
            hand_cards += ' ' + card.__str__() +','

        return 'Your hand is:' + hand_cards

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

Kartu:

class Deck(object):

    def __init__(self):

        self.deck = []

        for suit in suits:
            for pip in pips:
                self.deck.append(Card(suit,pip))

        self.deck = self.deck*numdecks


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

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

Lalu saya memiliki daftar bernama player_hands yang menyimpan daftar objek Tangan (numplayers adalah variabel dari input sebelumnya):

player_hands = []

for x in range(numplayers):
    player_hands.append(Hand())

Dan akhirnya saya memiliki fungsi yang disebut dealcard yang ingin saya gunakan untuk meneruskan objek Kartu dari Dek ke Tangan (di mana Dek dan Tangan yang akan digunakan dilewatkan sebagai argumen):

def dealcard(deck, hand):
    hand.draw(deck.deal())

Dan ini adalah di mana saya memiliki masalah saya. Ketika saya melakukan kode di bawah ini, fungsi tersebut tampaknya menambahkan Kartu yang sama ke setiap instance kelas Hand sekaligus:

d = Deck()
dealcard(d,player_hands[0])

Misalnya jika ada 3 Tangan dan saya kemudian menjalankan ini:

for h in player_hands:
    print h

Saya mendapat:

Tanganmu adalah: D6,
Tanganmu adalah: D6,
Tanganmu adalah: D6,

Di mana D adalah suit dan 6 adalah pip dari Kartu yang saya coba tambahkan ke player_hands[0] - yang menurut saya akan menjadi Tangan pertama dalam daftar player_hands? Mengapa itu ditambahkan ke setiap instance dalam daftar dan bagaimana saya bisa menghentikan ini terjadi?

Saya telah melihatnya dan mencoba variasi ini dan berbagai cara pencetakan untuk memastikan itu bukan hanya karena saya salah mencetaknya. Saya tidak mengerti apa yang salah!

Maaf pertanyaannya agak panjang, saya hanya mencoba memberikan info sebanyak mungkin. Ini mungkin sesuatu yang sangat sederhana, saya tidak bisa melihatnya karena saya baru belajar. Bantuan apa pun akan sangat dihargai!

0
Neil Scrivener 20 November 2017, 03:03

1 menjawab

Jawaban Terbaik

Ada masalah dalam meneruskan daftar ke konstruktor di kelas Hand. Anda harus menggunakan kartu = Tidak ada alih-alih kartu = [] seperti yang ditunjukkan di bawah ini.

class Hand(object):

    def __init__(self, cards = None):
        if cards is None:
            cards = []
        self.cards = cards

    def __str__(self):

        hand_cards = ''

        for card in self.cards:
            hand_cards += ' ' + card.__str__() +','

        return 'Your hand is:' + hand_cards

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

Anda dapat membaca tautan berikut untuk informasi lebih lanjut Meneruskan daftar ke kelas python

0
tourism 20 November 2017, 01:39