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

Python problem z wyświetlaniem

Object Storage Arubacloud
0 głosów
166 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,860 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ź 275 wizyt
pytanie zadane 20 czerwca 2023 w Python przez Bondrusiek Maniak (61,370 p.)
0 głosów
1 odpowiedź 222 wizyt
0 głosów
2 odpowiedzi 384 wizyt
pytanie zadane 8 lutego 2023 w Python przez Wujaszek Nowicjusz (120 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 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

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy 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!

...