informatika.bilíčka.sk

Výpis, premenné, načítanie vstupu

Základným poslaním počítačového programu je na základe vstupných hodnôt vypočítať výstupné hodnoty. Vstupom pre program môže byť napríklad aktuálna teplota (ktorú meria senzor), smer alebo rýchlosť vetra, obyčajný vstup zo senzra - napríklad či sú alebo nie sú dvere zatvorené. Vstupom môže byť aj veľmi veľa údajov - napríklad databáza študentov našej skoly, v ktorej program umožní používateľovi vyhľadávať alebo môže poskytnúť štatistiku (nájde študenta s najlepším priemerom, vytvorí graf dochádzky v závislosti na kalendárnom mesiaci, etc.). Naše programy z počiatku obmedzíme na vstupy od používateľa - manuálne zadané číselné a textové hodnoty, ktoré si náš program po spustení vypýta. Na ich uloženie v programe a prácu s nimi budeme používať premenné. Ukážeme si tiež príkaz, ktorým program oznámi výsledky. Program, ktorý by len "zjedol" vstup a nič na neho základe nevykonal je nám predsa na nič... Výstupom našich programov bude zatiaľ len obyčajný text (čísla a písmená), no je fajn uvedomiť si, že výstupom môže byť napríklad aj zapnutie motora (otvorenie okna, dverí, zamknutie, ...), rozsvietenie svetla, spustenie poplachu, odoslanie emailu, ...

Výpis

Áno, ideme na to opačne, najprv výpis...

Vytvoriť program, ktorý len "rozpráva" a nezaujíma ho žiaden vstup je veľmi jednoduché, stačí na to jeden jediný príkaz print. Príkaz napísaný v kóde pozostáva zo svojho mena "print" a zátovriek, v ktorých sa nachádzajú argumenty. Argument je vstupom pre príkaz - na základne argumentu môže byť správanie príkazu rôzne. Príkaz print vykonáva len jednu jedinú činnosť, zoberie argument a vypíše ho na výstup (v praxi sa výstup zobrazuje po spustení programu v okne interaktívneho interptretra SHELL).

Príklad: program, ktorý pozdraví...

print("ahoj")

Všimnite si, že text, ktorý chceme vypísať, sme "obalili" do úvodzoviek. Python sa snaží každé jedno slovo v kóde interpretovať ako príkaz, no slovíčko "ahoj" príkazom nie je. Ak chceme, aby príkaz print vypísal slová, ktoré nie sú príkazmi, musíme ich obaliť do úvodzoviek - vznikne tak tzv. "textový reťazec", ktorý sa už Python nesnaží ďalej vyhodnocovať. Existuje argument, ktorý by sa pred výpisom ešte vyhodnocovať mal? Áno - napríklad vám z minulej hodiny známe matematické výrazy. Vyskúšajte napríklad tieto dva príkazy, výsledok bude rozdielny:

print(1+1)
print("1+1")

Príkazu print môžeme poskytnúť aj viacero argumentov. Argumenty oddeľujeme čiarkami:

print("Výsledkom výpočtu 1+1 je", 1+1)

Pre programátorov - detailistov: Za povšimnutie stojí, že pri použití viacerých argumentov príkaz print vyhodnotí tie, ktoré nie sú v úvodzovkách a potom všetky argumenty (a výsledky vyhodnocovania tých bez úvodzoviek) spojí medzerami a až potom vypíše, čo nemusí byť vždy žiaduce.

Premenné

Čo je v matematike premenná? Ako ju označujeme? Čo reprezentuje?

V programovaní premenné reprezentujú rôzne hodnoty ale tieź rózne typy hodnôt. My budeme do premenných zatiaľ priraďovať len číslené a textové hodnoty. (v premennej môže byť tiež "pravdivostná hodnota" - pravda alebo nepravda - true alebo false, alebo aj zložitejšia dátová štruktúra ako zoznam, slovník či objekt, o tom sa ale budeme učiť neskôr, možno až na seminári)

Vytvorenie premennej

Premennú vytvárame pomocou príkazu priradenia - symbolu "rovná sa". Premennú vytvoríme tak, že do nej priradíme hodnotu, viď ukážka nižšie.

a = 10

V ukážke sme vytvorili premennú s názvom a a priradili do nej hodnotu 10

Do premennej môžeme priradiť aj textový reťazec - text obalený úvodzovkami. Napríklad:

meno_pouzivatela = "Jozefína"

Z pochopiteľných dôvodov nie je dovolené (lebo to nie je ani zmysluplné) používať premenné, ktorých obsahom je text v aritmetických výrazoch. Veď čo by malo byť výsledkom "ahoj" umocneného na štvrtú, alebo aký by mal byť zvyšok po delení "dobrý deň" % "dovidenia"... Ak neveríte, vyskúšajte, Python sa Vám posťažuje sám :)

Voľba názvu premennej

V programovaní premenné zvyčajne označujeme dlhšími názvami ako jedným písmenkom, snahou je byť čo najstručnejší ale tiež mať kód čo najprehľadnejší - teda aby aj ďlašiemu čitateľovi nášo kódu bolo podľa možností už po prvom prečítaní čo najjasnejšie čo premenná označuje.

Názov premennej nemôže byť hocijaký, treba dodržať nasledovné:

Porušenie niektorých zásad Python-u nevadia, no snažíme sa ich dodržiavať ako súčasť pekného programátorského štýlu:

hlbkaBazena = 10
vyska_snehu = 200

Pouzitie premennej

Po tom, ako premennú definujeme (deklarujeme) pomocou operátora priradenia (symbol "rovná sa"), môžeme ju používať ako bežné čislo v aritmetických príkladoch alebo aj v príkaze print bez použitia úvodzoviek - Python ju už pozná a na jej miesto dosadí poslednú priradenú hodnotu.

hlbkaBazena = 10
print("Hlba bazena je", hlbkaBazena)

Do premennej môžeme hodnotu priradiť aj viackrát, treba pri tom dávať pozor na to, že program sa vykonáva postupne - po riadkoch, teda po tom ako do premennej priradíme "novú" hodnotu, vo všetkých riadkoch pod riadkom, v ktorom sme priradili bude mať premenná už novú hodnotu.

Nasledový program vypíše po spustení dva riadky - "Hĺbka bazena je 10" a "Hĺbka bazena je 20"

hlbkaBazena = 10
print("Hĺbka bazena je", hlbkaBazena)

hlbkaBazena = 20
print("Hĺbka bazena je", hlbkaBazena)

Pozrite si nasledovné príkazy priradenia. Dávajú zmysel? Dá sa takýto program spustiť?

pocetZiakov = 10
pocetZiakov = pocetZiakov + pocetZiakov
pocetZiakov = 10
pocetZiakov = pocetZiakov + 100

Obe ukážky priradenia dávajú v Python-e zmysel. (Aj keď matematik by možno v prvom príklade povedal, že pocetZiakov musí byť 0 a v druhom by povedal, že také niečo platiť nemôže.) V Pythone totiž príkaz priradenia nie je rovnicou! Príkaz priradenia sa vykonáva nasledovne: najprv sa vyhodnotí pravá strana (napravo od symbolu rovnosti) a výsledok tohoto vyhodnocovania sa potom priradí do premennej uvedenej vľavo.

Vpravo sa teda počíta s doterajšou hodnotou premennej a po vyhodnotení pravej strany sa nová hodnota zapíše do premennej - od teraz je v premennej už nová hodnota.

Načítanie vstupu

Aby náš program nebol jednoúčelný, naučili sme sa kód parametrizovať - (číselné) hodnoty, s ktorými program pracuje na začiatku kódu ukladáme do premenných a tak ich je možné pred spustením programu ľahko zmeniť. Programy však často vytvárame pre nejakého (programovania neznalého) používateľa, ktorému tento spôsob nemusí vyhovovať, kedže sa v kóde nevyzná. Predstavíme si príkazy na načítanie vstupu - náš program si pomocou nich hodnoty od používateľa slušne vypýta a on tak vôbec nemusí zasahovať do kódu.

Pozor! Pri načítaní vstupu postupujeme rôzne pri načítaní textu a načítaní čísla.

Načítanie textu (napríklad mena, priezviska)

meno = input("Prosím zadaj meno: ")

Na načítanie textu používame príkaz input(), do zátvoriek môžeme vložiť text, ktorý sa po spustení programu zobrazí ako výzva pre používateľa. Keď Python vykonáva príkaz input(), zobrazí výzvu pre používateľa a čaká, kým používateľ vloží nejakú hodnotu. Výzva sa zobrazí v okne SHELL, v ktorom je tiež potrebné zadať "odpoveď". Po zadaní textu odpovede v SHELLi je potrebné stlačiť ENTER. Používateľom zadaná hodnota sa uloží do premennej.

Napríklad program:

meno = input("Prosím zadaj meno: ")
print(meno)

program-01

Po spustení v okne SHELL uvidíme výzvu:

prompt in SHELL after using input()

výzva zobrazená po spustení programu-01

Program čaká na zadanie vstupu, napíšeme napríklad "Alexander":

user reaction to prompt in SHELL after using input()

pouivateľ zadá hodnotu - napríklad meno "Alexander"

Po stlačení ENTER Python spracuje zadanú hodnotu a program pokračuje ďalej:

python continues after user reaction to prompt

po zadaní hodnoty program pokračuje - vykoná sa príkaz print()

Načítanie čisel

Častejšie ako text potrebujeme od používateľa ako vstup číslenú hodnotu. Ak chceme, aby bol vstup od používateľa použiteľný vo výpočtoch, musíme Python-u povedať, že má vstup interpretovať ako číslo. Spravíme to "obalením" príkazu input príkazom int(). Python sa po načítaní vstupu pokúsi v ňom rozoznať číslo, ak sa mu to nepodarí, vyhlási chybu. Takto načítaný vstup môžeme používať vo výpočtoch.

Napríklad program:

vek = int(input("Prosím zadaj svoj vek: "))
print("Narodil(a) si sa v roku: ", 2025-1-vek, "alebo", 2025-vek)

program-02

Načítanie textu vs. čisel

Použitie príkazu meno = input() a vloženie hodnoty "Alexander" by bolo ekvivalentné priradeniu meno = "Alexander". V premennej meno je uložná hodnota dátového typu text (string), ktorý nemožno použiť vo výpočtoch ale možno ho vypísať v príkaze print. Použitie príkazu vek = int(input()) a vloženie hodnoty 17 je ekvivalentné priradeniu vek = 17. V premennej vek je potom uložná hodnota dátového typu číslo (integer) a možno ju použiť vo výpočtoch i výpisoch.

Ak chceme načítať desatinné číslo, používame namiesto int(input()) funkciu float(input()).

# text do premennej načítame pomocou funkcie input()
# napríklad meno, priezvisko, email, adresa, oslovenie, ...
meno = input()
ulica = input()

# celé číslo načítame pomocou int(input())
# napríklad vek, rok narodenia, číslo domu, vzdialenosť v km, ...
# 'int' je skratka pre 'integer', čo je angl. 'celé číslo'
vek = int(input())
rok = int(input())

# desatinné čísla načítame pomocou float(input())
# napríklad teplota, dĺžka, alebo iná veličina s požadovanou presnosťou
# 'float' označuje 'floating point number'
telota = float(input())
priemer = float(input())

Práca na hodine (a domáca úloha)