Python - przypisanie elementów listy

Python - przypisanie elementów listy

Wątek przeniesiony 2015-10-22 17:40 z Inne języki programowania przez Shalom.

KC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 19
0

Witam wszystkich.Dodam, że to jest w celu zabawy na listach, słownikach itd. Miałem takie zadanie, aby stworzyć wypisać wszystkie karty(jeden kolor od 2 do Asa i tak dla każdego koloru):

Kopiuj
kolory = ['a','b','c','d']
liczba = ['2','3','4','5','6','7','8','9','10','J','Q','K','A']
def karty():
    return[[(c,l) for l in liczba] for c in kolory]
print karty()

Potem miałem stworzyć listę 52 liczb(tyle ile kart) a następnie kolejną listę, tylko że już losowo występujące liczby:

Kopiuj
listapocz= []
listakon = []
for i in range(0,52):
    listapocz.append(i)
    
while len(listapocz) > 0:
    wylosowany = random.choice(listapocz)
    listapocz.remove(wylosowany)
    listakon.append(wylosowany)
print listakon

Na końcu miałem stworzyć coś takiego, że np. w mojej liście końcowej którą otrzymałem na 1 miejscu mam przykładowo numer 36. I chcę żeby teraz stworzyć kolejną listę która liczbę 36 zastępuje 36 elementem z moich przyporządkowanych kart(czyli dajmy na 36 miejscu mam damę kier, to chciałbym aby moja nowa lista miała zamiast 36 właśnie ową damę kier).
Napisałem coś takiego, ale coś jest nie tak, więc proszę o jakąś drobną pomoc.

Kopiuj
for i in range(0,52):
    listakon[i] = karty[listakon[i]]
print listakon
R3
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 419
2

można krócej

Kopiuj
import itertools
karty = list(itertools.product(liczba, kolory))
print karty

import random
r = range(52)
listakon = random.sample(r, len(r))

print map(lambda x: karty[x], listakon)
KC
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 19
0

Rozumiem, że to jest lepsze, wydajniejsze i ładniejsze rozwiązanie. Ale gdyby iść moim? W ostatnim kroku mogę jakąś ładną pętlą zrobić to żeby mi wyszło?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

Zapnij sie debugerem na tej ostatniej pętli i ZOBACZ co nie działa. Nikt tego za ciebie nie zrobi.

FU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 34
3

Karty można też przetasować za pomocą shuffle
ale nie jest tworzona nowa lista tylko modyfikowana oryginalna

Kopiuj
import random
r = range(52)
random.shuffle(r)
print r

W tym ostatnim przykładzie używasz karty jakby to była lista
a nie masz takiej listy tylko masz funkcję karty(), która zwraca listę.
Ale w tej funkcji niepotrzebnie masz jedną parę klamerek [ ]
i zamiast [('a', '5'), ... ] tworzy się [ [('a', '5'), ...] ]

Kopiuj
def karty():
    return[(c,l) for l in liczba for c in kolory] # usunieta jedna para klamerek [ ] 
print karty()

talia = karty()

for i in range(0,52):
    listakon[i] = talia[listakon[i]]
print listakon

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.