Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jan Koloničný:14.11.2019 14:29

Ahoj,
podle těchto stránek jsem se začal učit Python. Všechno mi dávalo smysl, než jsem narazil na OOP... zadrhl jsem se u tohoto příkladu .. konkrétně u toho středně pokročilého. Nejde mi vůbec vymyslet, jakým způsobem bych to měl udělat. Zkoušel jsem si dát půl měsíce pauzu a studovat na jiných stránkách. Potom jsem se vrátil zpět k příkladu s tím, že už toho umím o mnohem více a zase jsem jen zíral do obrazovky s tím, že absolutně nevím co s tím.. Když si stáhnu řešení, tak tomu rozumím, jak to funguje, uměl bych to napsat, ale prostě bez toho řešení mi nedocvakne, jak to poskládat dohromady. Myslím si, že mi něco z toho OOP uniká. Tak jsem se chtěl zeptat, zda-li někdo nevíte o nějakém kvalitním online kurzu, kde bych se to OOP pořádně naučil? Všude jsem našel pouze kurzy, kde se začíná úplně od začátku, ale přijde mi to zbytečné platit když 4 z 5 kapitol už umím a zajímá mě pouze ta poslední. Respektive nebyl by třeba někdo ochotný mi věnovat na skypu 2-3 hodinky týdně za nějakou finanční odměnu(vůbec nevím jak se částky za "doučování" pohybují), popřípadě klidně osobně - Jsem z Ostravy.

Chci docílit: Připravit se na své vysněné budoucí povolání.

 
Odpovědět
14.11.2019 14:29
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:14.11.2019 14:44

Mne ten link zadny clanek nezobrazi. Jen nejake prupovidky, ze si mam ten clanek koupit a ze mam 51 bodu a ze mi ho prodaji se slevou za 51 bodu. To vis, ze jo. To je pak tezke ti poradit, kdyz nemas kod, text clanku. Dotaz tak nejak k nicemu.

Oop je o tom vytvorit jakesi uzavrene celky. Treba pro napsani mailu:

mail.from= ...
mail.to = ...
mail.subj = ...
mail.body = ...
mail.addAttachment(file);
mail.send();

Clanky, nejlepe googlem, google = oop python
https://realpython.com/…programming/

Editováno 14.11.2019 14:46
 
Nahoru Odpovědět
14.11.2019 14:44
Avatar
Odpovídá na Peter Mlich
Jan Koloničný:15.11.2019 13:25

Ajoo, pardon. Nedošlo mi, že ten článek vidím, protože mám ty lekce zaplacené. Jde v podstatě o jednoduchou tahovou hru, kdy máte 7 lokací různě rozložených. Každá lokace má název a textový popis. Každá lokace má také referenci na 4 okolní lokace (tedy na lokaci na severu, jihu, západě a východě).
Příkazy jsou:

Jdi na [strana] - Jde na určitou světovou stranu
Konec - Ukončí aplikaci

 
Nahoru Odpovědět
15.11.2019 13:25
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:15.11.2019 15:19

No, jestli je to takhle spatne popsane v tom clanku, tak se ani nedivim.
Program na pohyb po mape. 7 mist, kazde vlastni nazev (treba reka, dum, louka). Z kazdeho mista mohou vest 1-4 cesty. (cili 7 propojenych ctverecku)

Si potrebujes udelat tabulky (treba databazovou):

lokace (lokace_id, lokace_nazev)
cesty (cesta_id, lokace_id1, lokace_id2)

A nebo to spojis do jedne

lokace (lokace_id, lokace_nazev, smer_0, smer_1, smer_2, smer_3)

Kdyz to nikam nevede, tak 0 nebo -1, kdyz ano, tak lokace_id (v db se zacina cislovat od 1).
Samozrejme, zhlediska jednoduche hry muses tu tabulku prepsat do pythonoveho pole, array.

Jaky dalsi postup ocekavas vysvetlit?

 
Nahoru Odpovědět
15.11.2019 15:19
Avatar
Jan Koloničný:19.11.2019 14:56

Ono je asi složité se o tomhle bavit, protože máš více zkušeností a hlavně znalostí. Takže ty to můžeš udělat pěti různými způsoby. Kdežto já to můžu udělat jedním způsobem, který se po mě v zadání chce a jinak to udělat nemůžu(třeba už jen proto, že nevím, co je array). Nějak jsem nad tím včera přemýšlel a došlo mi, že vůbec nevím, jak propojit dvě funkce z dvou různých tříd. Třeba tenhle příklad je pro mě něco nepřekonatelného:

Naprogramujte aplikaci, ve které figuruje auto a garáž. U auta evidujte SPZ a jeho barvu, u garáže evidujte jaké auto je v ní zaparkované (ne jen jeho SPZ, ale opravdu celé auto). Nechte auto zaparkovat do garáže (pomocí jeho metody zaparkuj()) a poté nechte vypsat garáž, která při svém výpisu vypíše i auto v ní zaparkované.

Řešení je tohle:

class Auto:

    spz = None
    barva = None

    def __init__(self, barva, spz):
        self.barva = barva
        self.spz = spz

    def vrat_spz(self):
        return self.spz

    def zaparkuj(self, garaz):
        garaz.vloz(self)


class Garaz:
    def vloz(self, auto):
        self.auto = auto

    def __str__(self):
        return f"V garáži je zaparkováno auto: {self.auto.vrat_spz()}"


skoda = Auto("modrá", "4t6 8998")
garaz = Garaz()
skoda.zaparkuj(garaz)
print(garaz)

Naprosto nerozumím, jak se propojily ty dvě třídy. Buď nerozumím tomu názvosloví a propojenosti nebo mám prostě v hlavě nasráno :-D. Nevím, co je horší... Proto píšu, že mi něco musí z toho OOP unikat. Rád bych začal znova, ale nevím od čeho se mám odpíchnout.. Kde dělám chybu, z čeho se to naučit atd.

 
Nahoru Odpovědět
19.11.2019 14:56
Avatar
Adam Petříček:20.11.2019 23:43
  • __init__ je konstruktor, to asi víš - zavolá se při vytváření objektu - zde se tedy při vytváření objektu auto nastaví jeho SPZ a barva podle toho, co se zadá do vstupních parametrů té funkce
  • garáž nemá zadané žádné atributy jako je barva, spz atd., které by se musely nastavit při vytvoření, obejde se tedy bez konstruktoru - garáž se tedy jen vytvoří
  • garáž ma atribut (proměnnou) auto, které značí auto zaparkované v ní
  • garáž má metodu (funkci) vloz, které má vstupní parametr auto a vloží ho do dané garáže
  • auto má metodu (funkci) zaparkuj, která vloží to auto, odkud se metoda zavolá do dané garáže
  • v programu se zavolá na vytvořené auto metoda zaparkuj, se vstupním atributem objektem garáže, která ho vloží do té dané garáže - v garáži je tedy zaparkované auto
  • garáž má poté metodu __str__, která se volá když vypisuješ celý objekt, ta metoda vypíše auto, které je momentálně zaparkované

odpověd na tvou otázku tedy - třídy se propojily tak, že se auto zaparkovalo do garáže, tím se atribut garáže nastavil na to dané auto a poté se mohlo z garáže to auto vypsat

Editováno 20.11.2019 23:45
 
Nahoru Odpovědět
20.11.2019 23:43
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 6 zpráv z 6.