• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Python problem z wyświetlaniem

VPS Starter Arubacloud
0 głosów
160 wizyt
pytanie zadane 27 listopada 2015 w Python przez evergreen Użytkownik (680 p.)
przywrócone 27 listopada 2015 przez event15

Witam, jestem zaczynam naukę Pythona i chcę napisać prostą grę w karty. Poniższy kod ma za zadanie dodać nową kartę (kolor i wartość), a następnie w funkcji print wyświetlić tablicę wszystkich kart. Jednak po użyciu funkcji print wyświetla się adres w pamięci karty, którą stworzono a nie jej kolor i wartość. Dlaczego?
 

   class Player:
        def __init__(self, player_name):
            self.name = player_name
            self.cards = []

        def print(self):
            if self.cards==[]:
                print("Brak kart!")
                return 0
            print("Posiadane karty: ")
            print(self.cards)

       def add_card(self, card):
            x=str(input("Podaj kolor karty: "))
            y=int(input("Podaj wartość karty: "))
            self.cards.append(Card(x,y))
            print("Dodano nową kartę!")
         


 

3 odpowiedzi

0 głosów
odpowiedź 27 listopada 2015 przez Bantu Nałogowiec (34,170 p.)

Jestem ciekaw jak próbujesz wyświetlić to co chcesz i po co przeciążać wbudowaną funkcję print() ?
Trochę zagmatwany ten kod, który tutaj wstawiłeś, ale ogólnie, żeby wyświetlić nazwę i kolor karty to musisz napisać coś mniej więcej tak.

Przyjmijmy, że masz klase Card, która ma dwa pola name i color, więc najpierw tworzymy obiekt Card:

card = Card(name="Dama", color="trefl")

teraz aby wyświetlić to co chcesz to dajesz

print(card.name) # wyświetla nazwę
print(card.color) # wyświetla kolor

Nie wiem czy coś Ci wyjaśniłem, ale widzę, że próbujesz sobie na siłę komplikować kod, a kawałek, który wstawiłeś u góry wyswietla adres, bo podajesz mu adres instacji obiektu, a nie odwołujesz się do właściowści z nazwą albo z kolorem.

Po za tym jeżeli masz jakąś tablicę kart to musisz zastosować jakąś pętlę, żeby wyświetlić wszystkie po koleji, bo w Twoim kodzie wyświetla tylko adres tablicy.

komentarz 27 listopada 2015 przez evergreen Użytkownik (680 p.)

No tak. Ja tylko chcę wyświetlić zawartość całej tablicy, a nie pojedynczego obiektu za pomocą card.name i card.color.
W takim razie, za pomocą funkcji len obliczam ilość elementów w tablicy i je wyświetlam.

 def wyswietl(self):
            if self.cards==[]:
                print("Brak kart!")
                return 0
            print("Posiadane karty: ")
            x=len(self.cards)
            print(x)
            for i in range(0,x):
                print(self.cards[i].color, self.cards[i].value)

 

komentarz 28 listopada 2015 przez Bantu Nałogowiec (34,170 p.)

Rozumiem, że ten powyższy kod teraz działa?
A i nie musisz obliczać wielkości tablicy wystarczy użyć czegoś takiego:

for card in self.cards:
    print(card.color, card.value)

 

0 głosów
odpowiedź 27 listopada 2015 przez adrian17 Ekspert (344,100 p.)

Jeśli chcesz żeby obiekty były wyświetlalne z użyciem print(), należy przeładować metodę __str__:

class Player:
    def __init__(self, player_name):
        self.name = player_name
        self.cards = []

    def __str__(self):
        if self.cards==[]:
            return "Brak kart!"
        return "Posiadane karty: " + str(self.cards)

player = Player("arek")
print(player)

 

0 głosów
odpowiedź 27 listopada 2015 przez Michał628496 Pasjonat (17,340 p.)
Adres wyświetla się dlatego że zo listy cards dodajesz obiekt , a nie jego parametry.

W Pythonie zawsze przy wypisywaniu obiektów(o ile nie mają przeciążonej funckji __str__) wyświetla się ich adres.

Podobne pytania

+1 głos
1 odpowiedź 253 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,370 p.)
0 głosów
1 odpowiedź 212 wizyt
0 głosów
2 odpowiedzi 354 wizyt
pytanie zadane 8 lutego 2023 w Python przez Wujaszek Nowicjusz (120 p.)

92,455 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...