Pokročilý kurz vývoje v Pythonu
Kapitola
>
Úroveň
Matematické moduly
Modul operátorů
Cíl
Ověřte a rozdělte objednávky stavebního materiálu pro nově zřízená zemědělská pole pomocí modulu operator.
Na horním patře přístavby se nachází několik kanceláří, kde jsou vedeny záznamy o inventáři a objednávkách stavebního materiálu potřebného pro nový rozvoj pozemků. K ověřování a výpočtu materiálů, které mají být použity při stavbě, lze využít celou řadu různých nástrojů – kromě modulu matematiky a statistiky můžeme použít modul operator.
Tento modul, import operator, lze využít ke zjednodušení operátorových výpočtů a k praktickému zabalení do funkcí. Tyto funkce můžete použít jak pro optimalizaci, tak pro generování hodnot, aniž by bylo nutné vytvářet objekt pro jejich ukládání.
operators.eq(): Přijímá dva argumenty, ověří, zda jsou argumenty navzájem shodné.operators.lt(): Přijímá dva argumenty, ověří, zda je první argument menší než druhý.operators.gt(): Přijímá dva argumenty, ověří, zda je první argument větší než druhý.operators.floordiv(): Přijímá dva argumenty, vydělí první argument druhým a aplikuje ekvivalent funkcemath.floor(), čímž výsledek zaokrouhlí dolů.operators.mod(): Přijímá dva argumenty, vrací zbytek po dělení obou argumentů.operators.contains(): Funkce se používá se seznamem, přijímá dva argumenty; první argument je seznam, druhý argument je hodnota, kterou chcete zkontrolovat, zda se nachází v seznamu. Vrací:truenebofalsev závislosti na přítomnosti hodnoty.operators.concat(): Přijímá dva seznamy jako argumenty, kombinuje je do jednoho pomocí jediné čisté funkce, může být rychlejší než jiné metody.operators.countOf(): Přijímá dva argumenty, seznam a hodnotu, která se má spočítat. Vrací počet výskytů dané hodnoty v seznamu.
Pro začátek se vydejte k tmavému X, které označuje červený, modrý a zelený koberec. Existuje šest (6) konstant: red_order, blue_order, green_order, což jsou objednávky materiálů, a dále: red_req, blue_req, green_req, což jsou požadovaná množství potřebná pro stavbu.
U tmavého X na červeném koberci použijte funkci read() k ověření požadovaného množství materiálů. Vytvořte proměnnou s názvem red_verification a použijte funkci operator.eq() s konstantami red_order a red_req, například takto: red_verification = operator.eq(red_order,red_req). Pomocí předem napsané funkce write() zobrazte výsledek uložený v proměnné red_verification.
Na modrém a zeleném X opakujte stejný postup – použijte funkci read() a vytvořte proměnné: blue_verification a green_verification. Do proměnné pro modrý koberec uložte hodnotu funkce operator.lt() s konstantami blue_order a blue_req, abyste ověřili, zda objednávka je menší, než co je požadováno. Do proměnné pro zelený koberec uložte hodnotu funkce operator.gt() s konstantami green_order a green_req, abyste ověřili, zda objednávka je větší, než kolik materiálu je potřeba. Použijte předem napsané funkce write() s odpovídajícími ověřovacími proměnnými pro jednotlivé barevné koberce.
Dále se vydejte ke světlému X a na stole použijte funkci read() k ověření objednávek, které již byly zadány a jsou na cestě. V objednávkové knize naleznete hodnoty dvou proměnných konstant: main_order a sub_order, a také informaci o počtu oddílů, do kterých je třeba materiály rozdělit. Po přečtení objednávkové knihy vytvořte proměnnou s názvem allocations a uložte do ní hodnotu funkce operator.floordiv(), která vydělí hodnotu main_order počtem oddílů uvedených v knize, například takto: allocations = operator.floordiv(main_order, -add sections-). Tím se objednávka rozdělí a výsledek se zaokrouhlí dolů. Pomocí předem napsané funkce write() zobrazte výsledek uložený v proměnné allocations.
Vydejte se ke zlatému X a vytvořte proměnnou s názvem remainder. Uložte do ní výsledek funkce operator.mod(), která sečte konstanty main_order a sub_order a vrátí zbytek po dělení těchto dvou objednávek. Na stole pak pomocí předem napsané funkce write() zobrazte výsledek uložený v proměnné remainder.
Vydejte se k tmavému X na fialovém koberci, kde budeme ověřovat, zda byla doručena nářadí potřebná pro stavbu. Máme dvě konstanty seznamů, delivery_1 a delivery_2, a budeme kontrolovat, zda bylo nářadí doručeno v první dodávce. Vytvořte proměnnou s názvem tools a uložte do ní výsledek funkce operator.contains(), přičemž jako první argument uveďte seznam delivery_1 a jako druhý argument řetězec “tools”. Tím se ověří, zda je nářadí obsaženo v dodávce, například takto: tools = operator.contains(delivery_1,"tools"). Jakmile to bude hotové, na stole pomocí předem napsané funkce write() zobrazte výsledek uložený v proměnné tools, který ukáže, zda byla nářadí úspěšně doručena.
Další úkol je zkontrolovat všechny dodávky. Vydejte se k tmavému X na bílém koberci a vytvořte seznam s názvem materials. Uložte do něj hodnotu funkce operator.concat(), přičemž jako argumenty použijte seznamy delivery_1 a delivery_2. Tím se oba seznamy rychle sloučí do jednoho. Na stole pak pomocí předem napsané funkce write() zobrazte výsledek uložený v proměnné materials, který zaznamená všechny materiály, jež již byly doručeny pro stavbu.
Nakonec se vydejte k tmavému X na oranžovém koberci, kde jsou uvedeny předpoklady pro zahájení stavby, přičemž jedním z hlavních údajů je, kolik dřeva (v tunách) je potřeba na začátku. Zkontrolujte, kolik dřeva bylo doručeno v rámci celé dodávky, a ohlaste to pomocí funkce speak() ve spojení s funkcí operator.countOf(). Jako první argument předejte vytvořený seznam materials, následovaný řetězcem “wood”. Tím se zjistí, kolikrát se dřevo v seznamu materials vyskytuje. Toto ukazuje, jak lze operátorové funkce používat samostatně, aniž by bylo nutné vytvářet objekt pro jejich ukládání, například takto: player.speak(operator.countOf(materials,"wood")). Tímto úkolem dokončíte úroveň.