2. Python ako kalkulačka, premenné, priradenie

Interaktívny režim

Budeme využívať základné vývojové prostredie na prácu s Pythonom, tzv. IDLE. Po jeho spustení sa otvorí textové okno s takýmto výpisom:

Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>

V tomto textovom okne sa budeme „rozprávať“ s počítačom v „pythončine“, teda my sem budeme písať text v jazyku Python a prekladač to preloží počítaču do jazyka, ktorému už rozumie. Text musíme zadať úplne správne, bez chýb, za znaky >>>. Keď zapíšeme správny matematický výraz, dozvieme sa aj odpoveď. Napr.

>>> 1 + 2 + 3
6
>>> 123
123
>>> 42 - 17
25

Vidíme, že Python tu „porozumel“ matematickému zápisu. Matematické výrazy teda môžu obsahovať čísla a operácie + a -. Môžete experimentovať aj s ďalšími matematickými operáciami: znamienko * (hviezdička sa používa na násobenie) a okrúhlymi zátvorkami vieme určiť poradie vyhodnocovania operácií v takomto výraze. Vyskúšajte napríklad:

>>> 3 + 4 * 5
23
>>> (3 + 4) * 5
35
>>> 25 - 7 - 10
8
>>> 25 - (7 - 10)
28

Takáto Pythonová kalkulačka dokáže aj deliť pomocou operácie / (lomka), napr.

>>> 132 / 11
12.0
>>> 1 / 2
0.5
>>> 1 + 2 / 3
1.6666666666666665

Vo výsledkoch výrazov, v ktorých sa nachádza delenie, vidíme čísla s desatinnou bodkou (na rozdiel od desatinnej čiarky v matematike).

Matematické zápisy musia byť zapísané úplne správne. Aj najmenšia chyba spôsobí upozornenie na chybu. Napríklad:

>>> 22 + 7 *
SyntaxError: invalid syntax
>>> 19 - (3 4)
SyntaxError: invalid syntax
>>> 10 / 0
Traceback (most recent call last):
  File "<pyshell#48>", line 1, in <module>
    10 / 0
ZeroDivisionError: division by zero

Takýmito upozorneniami sa nám Python snaží pomôcť, aby sme mohli lepšie pochopiť, aká je to chyba a mali šancu ju opraviť. Napr. SyntaxError: invalid syntax označuje, že aritmetický výraz nie je zapísaný správne, pravdepodobne v ňom chýba znamienko operácie, operand (napr. číslo) alebo zátvorka. Chybová správa ZeroDivisionError: division by zero oznamuje, že sme sa snažili deliť nulou.

Premenné

Počítač umožňuje nielen vypočítať nejaké matematické zápisy (tzv. aritmetické výrazy), ale umožňuje si niektoré vypočítané hodnoty dočasne zapamätať. Podobne, aj niektoré kalkulačky majú tzv. pamäť, do nej si vedia uložiť jednu alebo aj viac hodnôt a tie neskôr použiť v ďalších výpočtoch. Pri práci s Pythonom môžeme vytvoriť ľubovoľný počet takýchto „pamätí“ a každá si môže pamätať jednu hodnotu. V programovaní sa takýmto pamätiam hovorí premenná.

Premennou budeme nazývať zapamätanú hodnotu, ktorú musíme pomenovať nejakým menom. Vďaka tomuto menu sa ľahko dostaneme k tejto zapamätanej hodnote. Premennú si môžeme predstaviť ako škatuľku, v ktorej sa nachádza nejaká hodnota a spredu škatuľky je napísané jej meno. Podľa tohto mena vieme hocikedy škatuľku vyhľadať a zistiť, aká sa v nej nachádza hodnota.

Novú premennú vytvoríme veľmi jednoducho: použijeme na to špeciálny príkaz, budeme mu hovoriť priraďovací príkaz. Jeho zápis sa trochu podobá matematickej rovnosti. Napr. potrebujeme vytvoriť premennú, v ktorej budeme uchovávať nameranú výšku nejakého žiaka. Nazveme takúto premennú menom, napr. vyska a zapíšeme:

>>> vyska = 167

Týmto zápsom vznikne nová premenná (škatuľka) s menom vyska, ktorá má hodnotu 167. Ak teraz zapíšeme:

>>> cena = 22 + 7

Opäť vzniká nová premenná, teraz s menom cena, ktorej hodnota je výraz za znakom =, teda 29. Teraz ešte tretie priradenie:

>>> qb7rsh = 4788

Tento príkaz predvádza, že menami premenných môžu byť aj slová, ktoré nemajú nejaký zmysel. Ak premennú pomenujeme nič nehovoriacim menom, napríklad qb7rsh, vznikne väčšie riziko, že si ho horšie zapamätáme, prípadne zabudneme, čo za hodnotu sme sem uložili. Preto programátori zvyknú používať také mená, ktoré sa ľahko zapamätajú a ľahšie z nich môžeme pochopiť, aký typ hodnoty je v nej uložený.

V pamäti to teraz vyzerá nejako takto:

_images/02_01.png

Priraďovacím príkazom budeme teda rozumieť taký zápis, v ktorom sa pred znakom = nachádza nejaké meno premennej a za znakom = je hodnota, ktorú treba do tejto premennej uložiť. Ak je hodnotou aritmetický výraz, tak sa najprv vyhodnotí a až potom priradí do premennej. Moli by sme to zapísať takto:

>>> meno_premennej = hodnota_výrazu

Týmto zápisom vznikne nová premenná (škatuľka) s udaným menom a s danou hodnotou.

Ak teraz zapíšeme priraďovací príkaz s premennou cena:

>>> cena = 5 * 11

nevytvorí sa nová premenná, predsa premenná s týmto menom už existuje, ale existujúca premenná získava novú hodnotu. Namiesto pôvodnej hodnoty 29 sa zapamätá hodnota 55. Momentálny stav pamäti by sme mohli zakresliť takto:

_images/02_02.png

Premenné už vieme vytvárať, dokonca aj im meniť zapamätanú hodnotu, ale ešte potrebujeme vedieť zistiť hodnotu premennej. Našťastie zisťovanie hodnoty je veľmi jednoduché: stačí zapísať jej meno a Python nám okamžite oznámi jej hodnotu. Napr.

>>> vyska
167
>>> cena
55
>>> vek
Traceback (most recent call last):
  File "<pyshell#0>", line 1, in <module>
    vek
NameError: name 'vek' is not defined

V poslednom riadku sme sa snažili zistiť hodnotu premennej vek. Lenže takáto premenná zatiaľ neexistuje, preto nám to Python oznámil textom NameError: name ‚vek‘ is not defined (z výpisu si budeme všímať hlavne posledný riadok), kedže premenná ‚vek‘ nie je definovaná.

Meno premennej môžeme použiť aj v ďalších matematických zápisoch a Python nám namiesto mena dosadí jej hodnotu. Napr.

>>> 190 - vyska
23
>>> 13 + qb7rsh / cena
100.05454545454545

Mená premenných

Neskôr budeme vytvárať programy, ktoré budú pracovať s viacerými premennými. Mená týchto premenných môžeme zvoliť skoro ľubovoľne, ale správny informatik ich pomenuje tak, aby sa v neskorších zápisoch výrazov lepšie vyznal. Mená premenných môžeme skladať z malých písmen abecedy (najlepšie z anglickej abecedy) a číslic od 0 do 9. Môžeme použiť aj znak podčiarkovník _. Platia len dve obmedzenia: meno premennej nesmie začínať číslicou a musí byť rôzne od špeciálnych Pythonových rezervovaných mien (ako napr. slová def, for, and, atď). Ak si zvolíme nesprávne meno premennej, Python nás na to upozorní správou:

>>> def = 123
SyntaxError: invalid syntax
>>> 2cena = 0
SyntaxError: invalid syntax

Prvý priraďovací príkaz sa snaží priradiť do premennej def. Lenže slovo def je rezervované meno pre Pythonvský príkaz, takže sa nesmie použiť ako meno premennej. Všetky rezervované slová sa kvôli tomuto učiť nemusíte, Python vás na ne upozorní. Druhý priraďovací príkaz má chybné meno premennej, lebo takéto meno nikdy nesmie začínať číslicou.

Vhodnými menami sú, napr.

>>> strana_stvorca = 150
>>> obvod = 4 * strana_stvorca
>>> obsah = strana_stvorca * strana_stvorca

Všimnite si, že vďaka dobre zvoleným menám, vieme dosť presne určiť, že tieto priraďovacie príkazy pre danú veľkosť štvorca (v premennej strana_stvorca) vypočítajú jeho obvod (v premennej obvod) a jeho obsah (v premennej obsah). Z matematiky sme zvyknutí niektoré mená skracovať, napr. veľkosť strany štvorca môže byť a, resp. obdĺžnik má strany a a b. Predchádzajúci príklad, ktorý počíta obvod a obsah štvorca, môžeme dostatočne čitateľne zapísať aj takto:

>>> a = 150
>>> obvod = 4 * a
>>> obsah = a * a

Úlohy

  1. Zapíšte do tabuľky všetky aritmetické operácie, s ktorými ste sa zatiaľ zoznámili.

  1. Miro mal pred dvomi mesiacmi 16 rokov. Spočítajte koľko je to približne dní. Zjednodušte si výpočet tak, že budete predpokladať, že rok má 365 dní a mesiac má 30 dní. Koľko je to hodín a koľko sekúnd?

  1. Zapíšte súčet všetkých nepárnych čísel od 1 do 19.

  1. Zistite, ktorá cifra sa vyskytuje najčastejšie vo výsledku výrazu:

    123456789 * 111111111111111111111
    

    Toto zisťovanie musíte zatiaľ robiť ručne. Python by to dokázal zistiť tiež, ale tento zápis by bol komplikovanejší.

  1. Vypočítajte súčet takýchto čísel: jedna, jedna polovica, jedna tretina, jedna štvrtina, …, až jedna desatina.

  1. Do premennej pocet priraďte počet kusov, do premennej cena1 priraďte cenu za jeden kus, do premennej vysledna_cena zapíšte celkovú sumu, ktorú bude treba zaplatiť za daný počet kusov. Skontrolujte zápis pre cena1 = 15 a pocet = 7

  1. V premenných dlzka, sirka a hlbka máme priradené rozmery školského bazénu v centimetroch. Vypočítajte, koľko litrov vody treba na napustenie celého bazéna. Zistite, koľko je to kubických metrov. Počítajte napríklad s hodnotami dlzka=2500, sirka=1000, hlbka=180.

  1. Zapíšte takýto výpočet: v premennej x máme priradenú nejakú hodnotu, potrebujeme vypočítať: k x pripočítaj 1 a výsledok vynásob 2, opäť k výsledku pripočítaj 1 a vynásob 2 a do tretice opäť k výsledku pripočítaj 1 a vynásob 2. Napr. pre x rovné 5, by si mal dostať výsledok 54.

  1. V matematike sa počíta faktoriál nejakého čísla n ako súčin čísel od 1 do n. Napr. 4 faktoriál je súčin čísel 1 * 2 * 3 * 4. Do premennej faktorial10 priraďte hodnotu 10 faktoriál. Vypočítate ho ako súčin čísel od 1 do 10.

Úlohy pre pokročilých

  1. Výpočet 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 * 2 vieme zapísať ako umocnenie 2 na 10, teda v Pythone 2 ** 10. Vypočítajte 2 umocnené na 30 a zistite počet cifier tohto výsledku. Cifry musíme zatiaľ spočítať ručne.

  1. Zistite, ako sa počíta hodnota 2**8-1. Teda, či sa najprv vypočíta mocnina 2**8, od ktorej sa odpočíta 1, alebo sa najprv vypočíta rozdiel 8-1 a touto hodnotou sa potom počíta mocnina 2. Zistite, ako je to s operáciami násobenia a umocňovania: teda, ako sa počítajú výrazy 3*2**5 a 2**5*3.

  1. Matematici vedia, že keď spočítajú niekoľko za sebou idúcich mocnín 2, dostanú inú druhú mocninu zmenšenú o 1. Skontrolujte, či napr. súčet čísel 2**0, 2**1, 2**2, … 2**9, dáva hodnotu 2**10-1.

Zhrnutie

čo sme sa naučili:

  • interaktívny režim - režim, v ktorom Pythonu zadávame príkazy (za znaky >>>) a ten ich vyhodnotí, prípadne vypíše výsledok výpočtu

  • premenná - pomenovaná zapamätaná hodnota, premenné vznikajú pomocou priraďovacieho príkazu

  • priradenie - príkaz, ktorým sa nastaví nejaká hodnota do premennej

  • poznáme tieto číselné operácie: + (sčitovanie), - (odčitovanie), * (násobenie), / (delenie)

dôležité zásady:

  • je vhodné voliť dobré mená premenných tak, aby popisovali hodnotu, ktorú uchovávajú

  • na mená premenných využívame malé písmená abecedy, číslice a znaky _ (podčiarkovník)

  • zapisujeme čitateľný kód, napr. vkladáme medzery medzi aritmetickými operáciami aj okolo znaku = pre priradenie