Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

precz z tmp_list #5

Open
charzu opened this issue Sep 19, 2019 · 8 comments
Open

precz z tmp_list #5

charzu opened this issue Sep 19, 2019 · 8 comments
Assignees
Labels
enhancement New feature or request

Comments

@charzu
Copy link
Collaborator

charzu commented Sep 19, 2019

Chciałbym wyeliminować zmienną pomocniczą tmp_list

tmp_list = self.teams_list.copy()

Moglibyśmy użyć zip, ale zip 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 typu

for i in my_generator:
    do_sth(i)

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ć.

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.

@charzu charzu added the enhancement New feature or request label Sep 19, 2019
@czubert
Copy link
Owner

czubert commented Sep 19, 2019

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

@czubert
Copy link
Owner

czubert commented Sep 19, 2019

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)

@czubert
Copy link
Owner

czubert commented Sep 19, 2019

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

@czubert
Copy link
Owner

czubert commented Sep 19, 2019

bierze dluzsza liste pod uwage, ale przypasowuje mu nony, nas to urządza?

@charzu
Copy link
Collaborator Author

charzu commented Sep 23, 2019

Jeśli je dobrze obsłużysz to jak najbardziej nas urządza :)

@czubert
Copy link
Owner

czubert commented Sep 26, 2019

w sensie, ze np. if None, to wtedy odapala losowanie przeciwnika z przeciwnej druzyny?
; o

@charzu
Copy link
Collaborator Author

charzu commented Sep 26, 2019

  1. Liczę na to, że to skrót myślowy.
  2. Licze na to, że błędny kawałek kodu to też skrót myślowy.

Opisz lepiej to zachowanie, które wymyśliłeś :)

@czubert
Copy link
Owner

czubert commented Sep 27, 2019

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants