Warning
This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.

Co se jinam nevešlo, aneb nechci to mazat

TODO: under construction

Nastavení textového editoru Gedit

  1. Otevřete terminálové okno (ctrl+alt+t) a příkazem “gedit” spusťte textový editor.
  2. Pokud najedete kurzorem myši na horní lištu obrazovky, zobrazí se nabídka menu.
  3. Klikněte na “Edit” a vyberte “Preferences”.
  4. 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”.

Hry v terminálu

Knihovna 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 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.<barva> 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 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ř. 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 konvertor.

Úkol HELL

Vykreslení domku

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="")

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)

courses/pri-bootcamp/co-se-jinam-neveslo.txt · Last modified: 2022/09/09 20:04 by kubikji2