NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 9 - Bojovník do arény v Pythonu

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Barbora Zdvihalová:27. června 18:43

Nedostatecne vysvetlene.
Delate nejaky zapis na zacatku stranky a na konci cviceni udelate jiny, aniz byste ho vysvetlili.

print(f"Život po útoku: {bojovnik.graficky_zivot()}")

vs.

print("Život: {0}".format(bojovnik.graficky_zivot()))

Muzete mi vysvetlit, co znamena ten novy zapis, proc je tam ta nula.format? Diky

Editováno 27. června 18:44
 
Odpovědět
27. června 18:43
Avatar
Barbora Zdvihalová:27. června 18:46

Ahoj, muzete mi nekdo vysvetlit ta cisla?

bojovnik = Bojovnik("Zal­goren", 100, 20, 10, kostka)
souper = Bojovnik("Shadow", 60, 18, 15, kostka)

Dekuji.

Editováno 27. června 18:47
 
Odpovědět
27. června 18:46
Avatar
Barbora Zdvihalová:27. června 18:50

Muzu se jeste zeptat, jak muzeme mit uder za 24 hp, kdyz mame jednu desetistrannou kostku, tj. maximalni hodnota je 10?
Z vaseho kodu toto neni jasne.
"Shadow útočí s úderem za 24 hp."

 
Odpovědět
27. června 18:50
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 19:34

self._zivot představuje aktuální životy, self._max_zivot představuje počet životů pokud je jednotka nezraněna. Nejsou tedy vždy stejné. Budou různé pokud jednotka je zraněna.

Teď k metodě graficky_zivot() která je by mohla být napsána o dost lépe.

  • nevhodně pojmenovaná proměnná, naprosto postrádá význam toho co představuje.
  • je lokální, což je nevhodný návrh. takováto proměnná by měla být třídním atributem.
  • autor mohl použít funkci ceil() místo podmínek. Je to elegantní a působí to profesionálně.
def graficky_zivot(self):
    pocet = math.ceil((self._zivot / self._max_zivot) * Bojovnik.DELKA_UKAZATELE_ZIVOTA)
    return f"[{'#' * pocet}{' ' * (Bojovnik.DELKA_UKAZATELE_ZIVOTA - pocet)}]"

'#' * pocet - znamená opakuj # tolikrat kolik je počet
' ' * (Bojovnik.DEL­KA_UKAZATELE_ZI­VOTA - pocet) - znamená opakuj znak mezera tolikrát kolik zbývá do celkové délky

Odpovědět
27. června 19:34
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 19:38

1. f-string zápis
print(f"Život po útoku: {bojovnik.gra­ficky_zivot()}")

f"..." znamená formátovaný řetězec (f-string). Vloží do řetězce přímo výsledek výrazu uvnitř {}

2. .format() metoda
print("Život: {0}".format(bo­jovnik.grafic­ky_zivot()))

"{0}" je zástupný znak (placeholder) v řetězci. .format(...) vloží argument(y) na místa těch zástupných znaků. 0 znamená první argument předaný do .format()

Odpovědět
27. června 19:38
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:27. června 19:43

bojovnik = Bojovnik("Zal­goren", 100, 20, 10, kostka)
souper = Bojovnik("Shadow", 60, 18, 15, kostka)

Vytváříš instance a nastavuješ jejich atributy pomocí argumentů předaných do konstruktoru.
def __init__(self, jmeno, zivot, utok, obrana, kostka):

Odpovědět
27. června 19:43
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 19:54

Muzu se jeste zeptat, jak muzeme mit uder za 24 hp, kdyz mame jednu desetistrannou kostku, tj. maximalni hodnota je 10?

Celkový útok (úder) je dán součtem útoku a vrhu kostkou. Shadow má útok 18 a hod kostkou byl 6. Proto 24.

Odpovědět
27. června 19:54
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Odpovídá na DarkCoder
Barbora Zdvihalová:27. června 20:23

Vytváříš instance a nastavuješ jejich atributy pomocí argumentů předaných do konstruktoru.
def __init__(self, jmeno, zivot, utok, obrana, kostka):

Diky za odpovedi.
Presto, co znamena zivot 100, utok 20, obrana 10?
Myslela jsem, ze zivot na zacatku je 20 (proc tedy 100?) a ze utok a obranu nam generuje kostka?

 
Odpovědět
27. června 20:23
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 20:31

Každá jednotka (instance) má nějaký počet životů. To právě představuje atribut zivot. Čím větší hodnota, tím více jednotka snese zranění než padne. Útok je část celkového útoku a udává, jak velké zranění může protivníkovi způsobit. Obrana představuje redukci zranění. Kostka je dodatečný modifikátor útoku a obrany..

Odpovědět
27. června 20:31
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Barbora Zdvihalová
DarkCoder:27. června 20:38

Proměnná celkem = 20 (později správně pojmenovaná jako DELKA_UKAZATE­LE_ZIVOTA) představuje:

Maximální počet dílků (segmentů) v grafickém indikátoru života
Je to vizuální délka ukazatele zdraví — kolik "čtverečků" (např. #) maximálně můžeš zobrazit v indikátoru zdraví, bez ohledu na skutečný počet životních bodů.

Odpovědět
27. června 20:38
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 91.