Mirek Kučera - vvendigo@seznam.cz
Stačí v Microsoft Store (ikona nákupní tašky) zahledat Python a nechat nainstalovat verzi 3.10 (ale pro naše účely lze použít i jakoukoli jinou verzi > 3.1).
Druhou možností, např. pro jiný operační systém, je stáhnout a nainstalovat balík z python.org.
V nabídce programů přibude Python a IDLE.
Po spuštění se objeví tzv. konzole, do které můžeme psát matematické výrazy i jakékoli příkazy jazyka Python. Po stisknutí klávesy Enter se daný příkaz vyhodnotí.
Například:
>>> 10 + 190 200 >>> max(1, 3, 2) 3 >>> "+" * 20 '++++++++++++++++++++'
Zmínil jsem příkaz print()
a jeho parametry sep
a end
:
>>> print() >>> print(2, "plus", 2, "je", 2+2) 2 plus 2 je 4 >>> print(1, 2, 3, 4, sep="/") 1/2/3/4
V menu IDLE vlevo nahoře, zvolíme File -> New File a otevře se okno editoru. První program bude opravdu jednoduchý:
print("Ahoj, Světe!")
Program spustíme pomocí menu editoru Run -> Run module. Před spuštěním musíme program uložit, spouští se ze souboru z disku.
Spuštění lze urychlit použitím klávesových zkratek: Ctrl+S (uložit) a pak F5 (spustit modul).
for
cyklusOpakované psaní stejné funkce je dost otravné. Proto počítačové jazyky obsahují konstrukci cyklu. V případe Pythonu je trochu specifická: for JMENO_PROMENNE in POSLOUPNOST_DAT:
. Následující řádky, odsazené o stejný počet mezer jsou pak vykonány tolikrát, kolik je prvků v POSLOUPNOST_DAT (této skupině řádků se říká tělo cyklu). Pro naší raketu jsem to použil takto:
print(" I ") print(" XXX ") print(" XOX ") print(" XXX ") print("XXXXX") print("XXXXX") print("XX XX") for X in range(0, 40): print()
Funkce range(OD, DO, KROK)
vyrobí potřebnou posloupnost dat - čísel od OD do čísla DO-1. Abychom viděli čísla co vyrobí v konzoli, musíme ji předat jako parametr do funkce list()
, která z nich vyrobí seznam:
>>> range(0, 10) range(0, 10) >>> list( range(0, 10) ) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> list( range(0, 10, 2) ) [0, 2, 4, 6, 8] >>> list( range(10, 0, -1) ) [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
V našem případě nás ta čísla ale nezajímají, jde nám jen o ten počet opakování cyklu. Kdybychom ale chtěli, můžeme v těle cyklu pracovat s proměnnou X (do které Python postupně dává čísla z posloupnosti), jak jsem ukazoval na "odpočtu před startem".
Použil jsem termín proměnná. Zjednodušeně lze říct, že je to pojmenování místa v paměti počítače, kam si ukládáme nějakou hodnotu. Např. číslo nebo text ("řetězec").
Proměnnou vyrobíme přiřazením - napíšeme nějaké jméno (může obsahovat velká a malá bez diakritiky, číslice a "podtržítka" [znak _]), znak = a hodnotu. Následně můžeme používat název proměnné tam, kde bychom jinak použili hodnotu:
>>> vyska_stromu = 12 >>> print("Strom měří", vyska_stromu, "metrů.") Strom měří 12 metrů. >>> jmeno = "Karel" >>> print("Jmenuje se", jmeno, "a stoji u stromu mericiho", vyska_stromu, "metru.") Jmenuje se Karel a stoji u stromu mericiho 12 metru.
Proměnné se hodí tam, kde chceme nějakou hodnotu použít opakovaně. Zároveň pak máme možnost ji měnit změnou na jednom místě programu.
Python sám nabízí jen nejnutnější funkce. Pokud potřebujeme něco víc, musíme si do programu přidat knihovnu, která danou funkci obsahuje. Už základní instalace Pythonu ale obsahuje spoustu šikovných knihoven.
Nám by se hodilo odlet rakety trochu zpomalit. Na to lze použít funkci sleep()
z knihovny time
. Knihovnu načteme příkazem import
:
import time print(" I ") print(" XXX ") print(" XOX ") print(" XXX ") print("XXXXX") print("XXXXX") print("XX XX") for _ in range(0, 10): print(" ...") time.sleep(0.2) for _ in range(0, 30): print("") time.sleep(0.1)
Do programu si můžeme psát poznámky, takzvané "komentáře". Jde to dvěma způsoby:
# <- pouzitim "hashtagu" - zbytek radku za timto znakem pocitac ignoruje # lze ho napsat na samostatny radek print("ahoj!") # ale i na konec radku, ktery neco vykonava print("ale hashtag # uvnitr retezce jako komentar nefunguje") # print(a + b) # komentar lze pouzit i na docasne "vypnuti" casti programu # druhou moznosti je pouziti viceradkoveho retezce (misto jednech uvozovek se uzavira do trech): """ toto je viceradkovy komentar tento kod se nevykona: print("huhu") """
Program lze přerušit stisknutím kláves Ctrl
+ C
.
input()
Funkce input() dává uživateli možnost zadat nějakou vstupní hodnotu. Jako parametr se jí dává text výzvy:
a = input("Zadejte cislo: ") a = int(a) b = input("Zadejte druhe cislo: ") b = int(b) print("Souctem", a, "a", b, "je", a + b)
Narazili jsme na to, že Python rozlišuje typ proměnné nebo hodnoty. Například je rozdíl mezi číslem a řetězcem, protože některé operace nemusí pro různé typy hodnot dávat smysl. Třeba dělení řetězce číslem nebo jiným řetězcem:
>>> "karel" / 2 Traceback (most recent call last): File "", line 1, in TypeError: unsupported operand type(s) for /: 'str' and 'int' # Ani retezec obsahujici cislo nebude fungovat. # Python obsah retezce nezkouma, je to pro nej proste spatny typ hodnoty pro deleni: >>> "6"/2 Traceback (most recent call last): File " ", line 1, in TypeError: unsupported operand type(s) for /: 'str' and 'int'
Ukázali jsme si, že čísla v textu lze převést na správný typ hodnoty pomocí "funkcí" int()
a float()
.
>>> int("123") 123 >>> float("1.23") 1.23 >>> int(123) / float("1.23") 100.0
if
Často potřebujeme vykonat některé příkazy jen za určitých podmínek. Na to slouží konstrukce if LOGICKY_VYRAZ:
následovaný blokem příkazů, které jsou vykonány, pokud platí LOGICKY_VYRAZ (má výslednou hodnotu True
). Případně můžeme ještě doplnit blok else:
, který se vykoná v opačném případě.
# priklady vyrazu >>> 1 > 2 False >>> 10 == 10 True # to stejne s promennymi: >>> a = 5 >>> b = 3 >>> >>> a > b True >>> a == b False >>> a < b False >>> a != b True >>> a > 2 True
Příklad programu:
cislo = input("Zadejte cislo mensi nez 10: ") cislo = int(cislo) if cislo < 10: print("Velmi spravne!") print("Cislo", cislo, "je mensi nez 10.") else: print("Ale, ale!") print("Cislo", cislo, "neni mensi nez 10.") if cislo > 15: print("Je vetsi, a to o hodne!")
Proměnné, smyčky a podmínky jsme použili k vytvoření jednoduché hry.
Knihovna random
obsahuje funkce, které vracejí náhodná čísla. My jsme použili randint(OD, DO)
, který vrátí celé číslo mezi OD a DO, včetně.
import random print("Myslim si cislo od 1 do 10.") print("Hadej, ktere to je! Mas 5 pokusu.") cislo = random.randint(1, 10) tip = 0 for kolo in range(1, 6): print(kolo, ". pokus.", sep="") vstup = input("Zadej svuj tip (1-10): ") tip = int(vstup) if tip == cislo: print("Spravne, je to", cislo, "!") break if tip < cislo: print("Me cislo je vetsi!") if tip > cislo: print("Me cislo je mensi!") if tip != cislo: print("Neuhodl's! Bylo to cislo", cislo)
A simulace spoření.
turtle
from turtle import * shape("turtle") speed(2) # nastaveni barev (cary a vyplne) color("red") fillcolor("yellow") # "chytre" vykresleni ctverce: for _ in range(4): forward(100) left(90) # posuneme zelvu bez kresleni: penup() forward(100) pendown() # vyplneni obrazce: begin_fill() forward(50) right(60) forward(50) right(60) forward(50) end_fill() # schovani kresliciho obrazce: hideturtle() exitonclick()
# nasledujici kousky programu delaji to same: # pokud naimportujeme knihovnu takto, musime pak pri volani funkci uvadet nazev knihovny: import turtle turtle.speed(1) # nebo pri importu muzeme zmenit nazev pod kterym budeme knihovnu pouzivat import turtle as t t.speed(1) # muzeme si nechat nastavit vsechny symboly (funkce, promenne a dalsi definice) z knihovny jako by byly definovany primo v programu: from turtle import * speed(1) # ale pozor, muze dojit ke kolizi s nazvy, ktere pouzivate v programu nebo z jinych knihoven # vybereme si, ktere symboly chceme: from turtle import speed speed(1) # to je bezpecnejsi a nekdo to pouziva ke zvyseni citelnosti programu (je jasne, co presne se z knihovny pouziva) # i konkretni funkci lze pri importu prejmenovat: from turtle import speed as rychlost rychlost(1)
# lze importovat i vice veci na jednom radku: import random, time from turtle import speed, forward as dopredu, left, right # ale pozor na prehlednost
Pokud máme nějaký kód, který se opakuje na různých místech programu, můžeme ho přesunout do vlastní funkce a pak volat ji. Funkce se definuje pomocí klíčového slova def
:
def JMENO_FUNKCE(JMENO_PARAMETRU1, JMENO_PARAMETRU2): # parametru muze byt libovolny pocet, v tele funkce je pak muzeme pouzivat jako promenne # telo funkce # ... return # Klicove slovo, ktere zpusobi navrat z funkce. Na konci nemusi byt - k navratu dojde automaticky. # pokud za 'return' napiseme nejakou hodnotu, bude vysledkem volani nasi funkce: def soucet(a, b): vysledek = a + b return vysledek print(soucet(1, 1)) # dalsi priklady: from random import randint def pozdrav_nebo_ne(): if randint(0, 10) < 5: return print("Zdravim!") pozdrav_nebo_ne() # pozdravi, nebo ne def pozdrav_vicekrat(pozdrav, kolikrat): for _ in range(kolikrat): print(pozdrav) pozdrav_vicekrat("Ahoj!", 10) # pozdravi 10x
Pokud napíšeme do programu samotná název funkce, funguje jako hodnota. Můžeme ho třeba přiřadit do proměnné nebo použít jako parametr. Právě pro předávání funkcí jako parametru se to často používá.
Pokud do programu napíšeme název funkce a za něj závorky (a do nich případně parametry), dojde k vykonání (takzvanému "zavolání") funkce. Výslednou hodnotou bude buď None
, nebo výsledek, který funkce vrátí pomocí return
.
# funkce jako hodnota: print # neudela nic, proste hodnota, kterou nijak nepouzijeme moje_promenna = print # prirazeni do promenne # nasledne muzeme pouzit zavolani: moje_promenna("Ahoj!") # volani funkce: print() # to zname... soucet = max(1, 3) # funkce vybere vetsi z cisel a vysledek se zapise do nasi promenne