Open charzu opened 5 years ago
Przy okazji pobaw się funkcją zip i zobacz jak się zachowuje kiedy jej się poda generatory równej i różnej długości tak samo jak normalnie, leci do konca krotszej listy
a = [1,2,3,4] b = ['a', 'b', 'c', 'd', 'e', 'f']
def generator(): for num in a: yield num
def generator2(): for letter in b: yield letter
print(list(zip(generator(), generator2()))) print(list(zip(a, b)))
print(list(generator())) print(list(generator2()))
a = [1,2,3,4] b = ['a', 'b', 'c', 'd', 'e', 'f']
def generator(): for num in a: yield num
def generator2(): for letter in b: yield letter
for i in generator(): print(i**2)
Istnieje fajna biblioteka: itertools - zawiera funkcje, które pozwalają na różne dziwne sposoby pętlić po różnych rzeczach. My byśmy mogli pętlić po dwóch team'ach jednocześnie żeby wybierać na zmianę bohaterów z dwóch drużyn. Poszukaj tam funkcji, która mogłaby nam się przydać. import itertools
a = ['z', 'x', 'y', 'w', 's', 't'] b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
def generator(): for num in a: yield num
def generator2(): for letter in b: yield letter
print(list(itertools.zip_longest(generator(), generator2())))
bierze dluzsza liste pod uwage, ale przypasowuje mu nony, nas to urządza?
Jeśli je dobrze obsłużysz to jak najbardziej nas urządza :)
w sensie, ze np. if None, to wtedy odapala losowanie przeciwnika z przeciwnej druzyny? ; o
Opisz lepiej to zachowanie, które wymyśliłeś :)
jaki bledny kawalek kodu? mialem na mysli, że jak petlisz a = ['z', 'x', 'y', 'w', 's', 't'] b = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i']
to zip łączy kolejne elementy listy a z kolejnymi elementami listy b. jak sie wezmie zip_longest, to wtedy jedzie do konca dluzszej listy, w tym przypadku 'b', wiec dla kolejnych elementów z listy b, przypasowane będą Nony. w zwiazku z tym moge dorzucic warunek, że jeżeli krótsza lista zwraca None, to żeby wybierało losowego przeciwnika z listy a zamiast Nona (dzieki temu team, ktory ma wiecej wojownikow bedzie atakowal do konca [czyli az wszyscy z jego druzyny nie zaatakuja])
Chciałbym wyeliminować zmienną pomocniczą
tmp_list
https://github.com/czubert/RPG_Game/blob/ba2e63190945907c352307a5197971565de68efe/engine.py#L40 Moglibyśmy użyćzip
, alezip
zwraca tyle krotek z elementami, co krótsza lista/iterable/generator ma elementów. Więc trzeba znaleźćalbo samemu napisaćcoś fajniejszego. Przy okazji pobaw się funkcjązip
i zobacz jak się zachowuje kiedy jej się poda generatory równej i różnej długości A poza tym zobacz jak się zachowuje generator wsadzony do pętli typuIstnieje fajna biblioteka:
itertools
- zawiera funkcje, które pozwalają na różne dziwne sposoby pętlić po różnych rzeczach. My byśmy mogli pętlić po dwóch team'ach jednocześnie żeby wybierać na zmianę bohaterów z dwóch drużyn. Poszukaj tam funkcji, która mogłaby nam się przydać.Z generatora (klasa Team), który zwraca nam bohatera można by wyrzucić wartość specjalną
None
dzięki czemu ostatnie co zwróci generator to po prostu. Oczywiście trzeba by jeszcze kontrolować jakoś co ta funkcja nam zwraca (czy gdzieś się nie skończyli już bohaterowie) - ale wtedy nie trzeba wyrzucać teamu z listy pomocniczej tylko nie obsługiwać ruchu.