IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 9. diel - Aréna s bojovníkmi v Pythone

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
hanpari
Člen
Avatar
hanpari:17.6.2014 14:27

Uvažoval jsem nad řádkem 88

pocet = int(self.__zivot / self.__max_zivot * celkem)

a napadl mne tenhle zápis:

pocet = celkem * self.__zivot // self.__max_zivot

kupodivu, je to totéž :)

Pak mne napadlo ještě tohle:

return "[{0:" "<20}]".format("#"*pocet)

místo tohoto:

return "[{0}{1}]".format("#"*pocet, " "*(celkem-pocet))

Ale tím bych asi ničemu nepomohl, právě naopak. V souvislosti s funkcí format mne napadl jeden zajímavý problém, který pak hodím do diskuse :)

 
Odpovedať
17.6.2014 14:27
Avatar
Patrik Smělý
Tvůrce
Avatar
Patrik Smělý:17.6.2014 14:51

Vypadá to zajímavě :)

 
Odpovedať
17.6.2014 14:51
Avatar
gcx11
Tvůrce
Avatar
Odpovedá na hanpari
gcx11:17.6.2014 16:56

Pokud přetypováváš float na int, tak se ti odtrhne desetinná část čísla. Operátor // ti vrátí v podstatě to samé.

 
Odpovedať
17.6.2014 16:56
Avatar
secretcode
Člen
Avatar
secretcode:1.2.2016 14:13

Niesom si istý, ale myslím že keď pred nasledujúci kód

bojovnik_2.utoc(self.__bojovnik_1)

nevložím

self.__bojovnik_2.utoc(self.__bojovnik_1)

tak kód nebude fungovať.

V tom spodnom kóde v článku je to už prepísané, ale v hornej časti článku je to zapísané v kóde bez self.

 
Odpovedať
1.2.2016 14:13
Avatar
gcx11
Tvůrce
Avatar
Odpovedá na secretcode
gcx11:2.2.2016 8:52

Ahoj, díky za upozornění, mám v tom chybu. Spíš přespat než vložit. Protože protože proměnné bojovnik1 resp. bojovnik2 nejsou definované, tak by Python vyhodil NameError.

 
Odpovedať
2.2.2016 8:52
Avatar
Daniel Martinek:2.12.2016 20:50

Ahoj, me osobne z nejakeho duvodu tvuj zpusob vycisteni obrazovky nesel:

def __vycisti_obrazovku(self):
    import sys as _sys
    import subprocess as _subprocess
    if _sys.platform.startswith("win"):
        _subprocess.call(["cmd.exe", "/C", "cls"])
    else:
        _subprocess.call(["clear"])

Proto jsem pouzil tohle, pro windows:

def __vycisti_obrazovku(self):
        import os
        def cls():
            os.system ("CLS")
 
Odpovedať
2.12.2016 20:50
Avatar
David Švarc
Člen
Avatar
David Švarc:11.12.2016 20:52

Ahoj, díky za velmi krásné vysvětlení objektů v Pythonu - používám ho k výuce studentů na semináři programování.
Jen si dovolím:

def __vypis_zpravu(self):
        import time as _time
        print(zprava)
        _time.sleep(0.75)

nahradit první řádek za:

def __vypis_zpravu(self, zprava):

jinak to vyhodí TypeError: __vypis_zpravu() bere 1 poziční argument a předáváme dva!

 
Odpovedať
11.12.2016 20:52
Avatar
j.c.
Člen
Avatar
j.c.:13.3.2018 10:25

co udělá toto jsem pochopil, ale prosím, mohl by to někdo česky popsat?
(self.__bojov­nik1, self.__bojovnik2) = (self.__bojov­nik2, self.__bojovnik1)

prohození polí v poli to není ;) Díky za vysvětlení.

 
Odpovedať
13.3.2018 10:25
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovedá na j.c.
Martin Petrovaj:13.3.2018 14:06

Jedná sa o paralelné priradenie, jedna z užitočných a skôr unikátnejších vlastností Pythonu :-)

Zápis

prem1, prem2, prem3, … = hodnota1, hodnota2, hodnota3, …

nám umožňuje dať na jeden riadok ľubovoľný počet priradení, ak sa nám to práve hodí (pozor - nepreháňať to, inak sa výrazne zhorší čitateľnosť kódu). Jediné čo to robí je to, že sa postupne vezme každý jeden pár premenná - hodnota a vykoná sa príslušné priradenie.

Paralelné priradenie sa ale často a zmysluplnejšie využíva aj na prehodenie dvoch premenných (bez potreby nejakej tretej, pomocnej premennej). Naivne by sme mohli s cieľom vymeniť obsah dvoch premenných skúsiť napísať nasledovný kód:

a = 4
b = 6
a = b
b = a
print(f"a: {a} \nb: {b}")

Uvidíme však, že v oboch premenných sa bude nachádzať hodnota 6. Je to kvôli tomu, že v priebehu takéhoto "prehadzovania" si jednu hodnotu nevyhnutne prepíšeme a prichádzame o ňu. Dá sa to vyriešiť treťou, pomocnou premennou:

a = 4
b = 6
c = a   # pomocná premenná na uloženie hodnoty a, aby sme o ňu neprišli
a = b
b = c

Python nám tento problém umožňuje vyriešiť paralelným priradením bez potreby ďalších premenných - z pohľadu používateľa (nás) sa všetky priradenia vykonajú "naraz":

a = 4
b = 6
a, b = b, a     # do "a" priraď "b" a do "b" priraď "a"

Dúfam, že už to je trochu zrozumiteľnejšie :-) Mimochodom, tie zátvorky okolo toho, ako sú použité v článku, potrebné nie sú

Odpovedať
13.3.2018 14:06
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
j.c.
Člen
Avatar
Odpovedá na Martin Petrovaj
j.c.:13.3.2018 14:21

díky moc :)
Já bych určitě použil proměnnou navíc ;)
Takto si to budu pamatovat.

 
Odpovedať
13.3.2018 14:21
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!