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

Python - przypisanie elementów listy

Odpowiedz Nowy wątek
2015-10-22 12:28
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
edytowany 1x, ostatnio: KarolCH, 2015-10-22 12:28
Nie zauważyłeś, że jest dział Python? - bogdans 2015-10-22 17:16

Pozostało 580 znaków

2015-10-22 13:03
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)

Pozostało 580 znaków

2015-10-22 15:53
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?

Pozostało 580 znaków

2015-10-22 17:43
0

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


Na PW przyjmuje tylko (ciekawe!) zlecenia. Masz problem? Pisz na forum, nie do mnie.

Pozostało 580 znaków

2015-10-22 20:09

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
Bardzo dziękuję za pomoc :) - KarolCH 2015-10-22 20:53

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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