Pokročilý kurz vývoje v Pythonu
Kapitola
>
Úroveň
Pokročilé třídy
Přetěžování operátorů
Cíl
Sečtěte, kolik vína se čistí pomocí vektorů a přetěžování operátorů.
Poté, co bylo víno lisováno, musí být filtrované a čiré; několik sudů se filtruje a všechen musí být propláchnut. Je důležité spočítat, kolik vína se vyrábí, aby bylo možné sudy uzavřít a nechat zrát.
K tomu je třeba vytvořit vektory a sečíst je, podobné seznamům, ale nejsou tak flexibilní a zároveň jsou paměťově úspornější. Obvykle se používají pro práci s koordináty, v tomto případě je budeme používat jako proměnné, které mohou uchovávat více než jednu hodnotu. Sčítání vektorů se provádí pomocí přetěžování operátorů, které rozšiřuje funkčnost objektů tříd tak, aby s nimi bylo možné pracovat pomocí operátorů stejně, jako s běžnými hodnotami.
Na začátku jděte a nasbírejte kovové vodní plechovky umístěné v horní části místnosti, které budou použity k propláchnutí vína filtrovaného v sudech. Jakmile je nasbíráte, vydejte se k tmavé X značce na červeném koberci, postavte se proti sudu a začněte vektorovat obsah každého sudu.
Značky X jsou uspořádány ve skupinách po třech (3) pro každý barevný koberec, zlatá X značka, světlá X značka a tmavá X značka. Na všech tmavých a světlých X značkách použijte funkci water() k propláchnutí sudů. Také na všech tmavých a světlých X značkách použijte funkci read() k určení, kolik vína se zpracovává v daném sloupci sudů. Na zlaté X značce použijte funkci write() k zaznamenání součtu množství dohromady.
V editoru kódu se nachází třída s názvem vector, která slouží k vytváření vektorů a jejich sčítání. Vytvořte objekty vector pro uložení dat získaných ze světlých a tmavých X značek, například na red kobercích se filtruje červené víno:
# Create object using data from dark X mark red_wine_dark = vector(345, 272) # Create object using data from light X mark red_wine_light = vector(248, 432) # Add together vectors for totals red_wine_total = red_wine_dark + red_wine_light
Ve vektoru se první pozice nazývá x a druhá pozice y, vzorec vypadá takto: object_name = vector(x,y). To je důležité pro naplnění vektorů informacemi získanými pomocí funkce read().
Na zlatých X značkách použijte funkci write() k zápisu celkového součtu pro každou sadu vektorů, například u červených kobercových X značek se to píše takto:
await player.write( "There is a total of %s pounds on the left barrels and %s pounds on the right barrels" % (red_wine_total.x, red_wine_total.y)
Nezapomeňte na konci celkových hodnot přidat .x a .y, abyste určili hodnoty jednotlivých vektorů.
Pro každou sadu barevných koberců se filtruje jiný druh vína. Na již zmíněném red koberci se filtruje red_wine; na yellow kobercích se filtruje sparkling_wine; na green kobercích se filtruje white_wine; a na orange kobercích se filtruje orange_wine.
Jakmile budou všechny světlé a tmavé X značky propláchnuty pomocí funkce water() a na všech zlatých X značkách budou zaznamenány celkové hodnoty, úroveň je dokončena.