Hej, napisałem metodę, która ma automatycznie tworzyć karty do gry:
def _make_deck() -> list:
figures = ['A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3', '2']
colors = ['wino', 'serce', 'trefl', 'wino']
deck = []
card = []
for col in colors:
for fig in figures:
card.clear()
card.append(fig)
card.append(col)
print(card)
deck.append(card)
print(deck, '\n')
return deck
Problem leży w tym, że przy takim zapisie, karty dodają się w bardzo dziwny sposób:
['A', 'pik'] -> pojedyńcza karta
[['A', 'pik']] -> aktualny deck po dodaniu karty
['K', 'pik']
[['K', 'pik'], ['K', 'pik']]
['Q', 'pik']
[['Q', 'pik'], ['Q', 'pik'], ['Q', 'pik']]
To samo się dzieje w momencie użycia zapisu del card[:]
def _make_deck() -> list:
figures = ['A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3', '2']
colors = ['wino', 'serce', 'trefl', 'wino']
deck = []
card = []
for col in colors:
for fig in figures:
del card[:]
card.append(fig)
card.append(col)
print(card)
deck.append(card)
print(deck, '\n')
return deck
Oraz to samo kiedy zapiszę card *= 0.
def _make_deck() -> list:
figures = ['A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3', '2']
colors = ['pik', 'karo', 'trefl', 'wino']
deck = []
card = []
for col in colors:
for fig in figures:
card *= 0
card.append(fig)
card.append(col)
print(card)
deck.append(card)
print(deck, '\n')
return deck
Natomiast jeżeli zmienię tylko jedną rzecz w kodzie, mianowicie zamiast card.clear(), del card[:] lub card *= 0, napiszę card = [], wszystko działa poprawnie.
def _make_deck() -> list:
figures = ['A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3', '2']
colors =['wino', 'serce', 'trefl', 'wino']
deck = []
card = []
for col in colors:
for fig in figures:
card = []
card.append(fig)
card.append(col)
print(card)
deck.append(card)
print(deck, '\n')
return deck
['A', 'pik'] -> pojedyńcza karta
[['A', 'pik']] -> aktualny deck
['K', 'pik']
[['A', 'pik'], ['K', 'pik']]
['Q', 'pik']
[['A', 'pik'], ['K', 'pik'], ['Q', 'pik']]
Ktoś jest w stanie mi wytłumaczyć skąd się to bierze?