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

Python - przypisanie elementów listy

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):

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:

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.

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

można krócej

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)
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?

0

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

3

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

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'), ...] ]

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

1 użytkowników online, w tym zalogowanych: 0, gości: 1