====== Co se jinam nevešlo, aneb nechci to mazat ====== TODO: under construction ===== Nastavení textového editoru Gedit ===== - Otevřete terminálové okno (ctrl+alt+t) a příkazem “gedit” spusťte textový editor. - Pokud najedete kurzorem myši na horní lištu obrazovky, zobrazí se nabídka menu. - Klikněte na “Edit” a vyberte “Preferences”. - V záložce “Editor” nastavte hodnotu “Tab width” na 4. Dále zaškrtněte možnost “Insert spaces instead of tabs” a “Enable automatic indentation”. ===== Návrhy na rozsáhlejší programy ===== ==== Hry v terminálu ==== Knihovna {{:courses:pri-bootcamp:textgame.py|textgame.py}} (0.0.6a) from textgame import * === Textová hra === state = "zacatek" while state != "konec": if state == "zacatek": print("") print("Jsi sladkem ve znamem pivovaru. Je rano a zvoni ti budik.") print("Co udelas?") print("1: Pujdu do prace.") print("2: Zustanu doma.") choice = input("Tvoje volba: ") if choice == 1: state = "vyhra" if choice == 2: state = "prohra" if state == "vyhra": print("") print("Sel jsi do pivovaru a odvedl jsi dobrou praci. Vyhral jsi!") state = "konec" if state == "prohra": print("") print("Zustal jsi doma a z prace te vyhodili. Prohral jsi.") state = "konec" print("Konec hry.") === Kviz === import random pocet = input("Zadejte pocet otazek: ") for i in range(1, pocet+1): otazka = random.randint(1, 2) print("") if otazka == 1: print("Jake je hlavni mesto Australie?") print("1. Canberra") print("2. Sydney") print("3. Praha") odpoved = input("Vase odpoved: ") if odpoved == 1: print("Spravne!") else: print("Spatne!") if otazka == 2: print("V jakem roce byl zalozen Plzensky Prazdroj?") print("1. 1841") print("2. 1842") print("3. 1843") odpoved = input("Vase odpoved: ") if odpoved == 2: print("Spravne!") else: print("Spatne!") ==== Kreslení obrázků ==== TODO: Move this somewhere else Nechť sem vstoupí jen programátor zručný a zvídavý! **Ale vážně**, tohle už jsou pokročilé věci!!! V této sekci se lehce seznámíme s dalším odvětvím informatiky, známým pod pojmem počítačová grafika, a hlavně si tu zopakujeme vše, co se dosud probíralo a co už byste měli ovládat (větvení programu, cykly, funkce, moduly, seznamy). Pokud jste v terminologii počítačové grafiky trochu zběhlí, pravděpodobně některé informace v následujícím odstavci budete chtít označit jako chybné. V rámci rozsahu osnov BootCampu jsme některé informace zjednodušili na možná ne zcela přesné, ale zato, dle nás, názornější a jednodušší na pochopení. Každý obrázek v počítači se skládá z mnoha malých čtverečků, kterým se říká pixely. Pixely tvoří pravoúhlou mřížku (označme ji jako bitmapu), která pokrývá celý obrázek (Ano. I tenhle obrázek, který na vás svítí z monitoru!) Jeden pixel typicky v paměti počítače popíšeme pomocí tří čísel. Tato trojice je známá jako RGB. Jedná se o tři základní barvy (červená, zelená a modrá). Každé z těchto tří čísel vyjadřuje, jak moc daná barva ovlivní výslednou barvu celého pixelu. Kombinací hodnot jednotlivých barev (což za nás dělá displej), pak dostaneme výslednou barvu, kterou nám náš monitor odpovídající pixel obarví. V následujícím cvičení si zkusíme zapsat do paměti počítače posloupnost čísel a necháme počítač, aby tato čísla interpretoval jako hodnoty RGB. Uvidíme, jestli se nám podaří tímto postupem nakreslit nějaký pěkný obrázek. Paměť počítače pro nás bude jednoduše pythonovský seznam. Do seznamu budeme zapisovat postupně RGB všech pixelů na obrázku, který se snažíme vytvořit. Tento seznam pak uložíme do souboru a počítači řekneme, že tento soubor je obrázek. **Zní to složitě?** Nebojte se, část práce jsme již udělali za vás. Stáhněte si modul {{:courses:pri-bootcamp:libbitmap.py|}}, ve kterém jsou již uložené RGB některých základních barev a který nabízí funkci na zápis seznamu s daty do souboru .PPM, což je jednoduchý obrázkový soubor (mnohem jednodušší než například .PNG, .JPG či jiné, které pravděpodobně znáte). Ufff. To už je ale textu. Rychle sem hodíme nějaký ukázkový kód, který nakreslí třeba žlutý čtverec o délce strany 50 pixelů. """ bitmap_test.py created by Jan Toth (c) 2017 Ukazka pouziti knihovny 'libbitmap.py' """ # Importujeme vse z knihovny 'libbitmap.py' from libbitmap import * # Nastavime si pocatecni hodnoty nasich dat rozmer = 50 obrazek = [] # Zapiseme data do seznamu # Colours. nam poskytuje importovana knihovna # Pro prehled vsech dostupnych barev nahlednete do knihovny for i in range(rozmer**2): obrazek.extend(Colours.YELLOW) # Ulozime vytvorena data do souboru # save_image(obrazek, jmeno, sirka, vyska) nam poskytuje importovana knihovna save_image(obrazek, "zluty_ctverec", rozmer, rozmer) Přijde vám, že se nic nestalo? Podívejte se do adresáře, ve kterém máte tento skript uložený. Zdá se vám to jednoduché? Pokud ano, zkuste nakreslit vlastní obrázky a pochlubte se ostatním. Zajímavé mohou být státní vlajky. Začněte například polskou, pak můžete přejít na německou či francouzskou. No a samozřejmě by byla také hezká vlajka česká! Pokud si vzhled všech vlajek nepamatujete, strejda [[https://www.google.cz/|Google]] vám určitě poradí ;-) Pokud by vám nestačily barvy, které vám dává k dispozici poskytnutá knihovna, můžete např. [[https://www.w3schools.com/colors/colors_picker.asp|zde]] vytouženou barvu najít. Potom zkopírujte hexadecimální vyjádření vámi vybrané barvy (ta čísla, která následují po znaku '#') a ve vašem kódu tuto hodnotu pošlete jako argument funkci Colours.get_colour_from_hex(), která vám na oplátku vrátí seznam s RGB hodnotami dané barvy. from libbitmap import* moje_barva = Colours.get_colour_from_hex(66ffe0) # A muzete pouzivat novou barvu! Pokud vám to jednoduché nepřijde, nebojte se zeptat! Pokud se budete chtít svými výtvory pochlubit, pravděpodobně je budete chtít zobrazit ve Windows. Tento operační systém však bohužel tak jednoduchý formát, jako je .PPM, nezvládá interpretovat. Pro převod na např. .PNG můžete použít tento online [[https://convertio.co/ppm-png/|konvertor]]. ==== Úkol HELL ==== == Vykreslení domku == --- //[[krizema3@fel.cvut.cz|Martin Křížek]] 2021/09/08 15:01// Jako první získáme požadovanou výšku domu a zkontrolujeme, zda splňuje obě podmínky (liché číslo, větší nebo rovno 5). vyska = int(input("Zadej vysku domu: ")) if (vyska < 5) or (vyska%2==0): print("Vyska musi byt liche cislo vetsi nez 5") Když známe výšku (a tedy i šířku) začneme vypisovat střechu. Nejdříve vykreslíme špičku střechy přesně v polovině šířky domu. else: print((vyska//2)*" " + "#") Pro každé další "patro" střechy for a in range (0, int((vyska//2)-1)): vypíšeme dostatečné odsazení od začátku řádku. print(((vyska//2)-1-a)*" ", end="") Poté vykreslíme část střechy. print("#", end="") {{ :courses:pri-bootcamp:colhouse.png?nolink&200 |}} Výstup v terminálu nebude barevný :) Vytvoříme mezeru uprostřed (štít střechy). print((2*a+1)*" ", end="") Nakonec vykreslíme část střechy na konci řádku a přeskočíme na další řádek. print("#") Přesuneme se k "tělu" domku. Vykreslíme horní řadu. print("#"*vyska) Vykreslíme stěny po řádcích stylem "znak + mezery + znak". Vykreslíme o dva řádky méně než je výška (všechny kromě horního a dolního, ty se vykreslují samostatně). for c in range (vyska-2): print("#" + " "*(vyska-2) + "#") Jako poslední vykreslíme dolní řadu. print("#"*vyska) == Kompletní kód == # Vojta vyska = int(input("Zadej vysku domu: ")) if (vyska < 5) or (vyska%2==0): print("Vyska musi byt liche cislo vetsi nez 5") else: print((vyska//2)*" " + "#") for a in range (0, int((vyska//2)-1)): print(((vyska//2)-1-a)*" ", end="") print("#", end="") print((2*a+1)*" ", end="") print("#") print("#"*vyska) for c in range (vyska-2): print("#" + " "*(vyska-2) + "#") print("#"*vyska) /* ---- === Úkol 2a === Vytvořte program, který vypíše zadaný měsíc zadaného roku společně s jeho jménem. Je nanejvýše vhodné zvolit nějaký pevný bod (datum včetně dne v týdnu) od kterého se bude výpočet odvíjet. Přehlednosti kalendáře lze nejsnáze dosáhnout formátovaným výstupem: number = 9 print("%2d " % (number)) # lehce zastaraly # nebo print("{:2d} ".format(number)) # doporuceny zpusob # nebo print(f"{number:2d} ") # od Python 3.6 Při tvorbě programu nejprve zanedbejte přestupné roky. Až vám bude program fungovat, přidejte **přestupné roky** -- každý rok, který je beze zbyku dělitelný čtyřmi, s výjimkou celých století, která nejsou beze zbytku dělitelná 400 __**Příklad:**__ **Vstup** Zadejte rok: 2017 Zadejte mesic: 9 **Výstup** ZARI 2017 PO UT ST CT PA SO NE 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 [[courses:pri-bootcamp:solutions#Den 4 - Úkol 2a|Řešení]] */