Tyto stránky již nejsou udržovány. Obsah je postupně přesouván/aktualizován na adrese chytrosti.marrek.cz.
786/1934
Pokusím se zde stručně a názorně ukázat, co Python umí. V Pythonu se jednoduché problémy řeší jednoduše a při řešení složitých problémů vás Python vede k srozumitelnosti a přehlednosti takže se nemusíte bát, že si ukroutíte hlavu nebo ukousnete prst. Python je jazyk Objektový, ale zároveň vás k objektovému kódu nikdo nenutí a můžete psát klasický strukturovaný kód.
Python je opravdu univerzální jazyk. Můžete psát jednoduché konzolové aplikace, můžete skriptovat webové aplikace, které pracují s databází, můžete vytvářet klikátka s grafický uživatelským rozhraním. Jako příklad webové aplikace můžu uvést například vykreslení součinu střídavého napětí a proudu.
Python je také výborný jazyk pro (elektro)technické a vědecké výpočty. Umožňuje velice jednoduchý a efektivní zápis a řešení matematických problémů (má například datový typ pro komplexní čísla) a s knihovnou SciPy a Matplotlib získáte opravdu výborný nástroj pro vizualizaci dat. Srovnejte si například mnou vytvořený kód v Pythonu s tím, co umíte udělat v tabulkovém procesoru.
Domnívám se, že Python je také dobrým kandidátem jako jazyk do úvodních kurzů programování. Vyzkoušejte a uvidíte.
Součástí instalace jazyka Python je i jednoduché vývojové prostředí IDLE, které obsahuje Python Shell a jednoduchý editor kódu.
Python Shell slouží k rychlé názorné interaktivní práci, k experimentování a pokusům, nebo jako výkonná kalkulačka. Můžete si rychle vyzkoušet, co dělá a jak se chová který příkaz, můžete krokovat program příkaz po příkazu. Pro nápovědu a doplňování kódu slouží tabulátor.
Python má velice jednoduchou a čitelnou syntax. Vnoření částí kódu podmíněného příkazu nebo cyklu -- tedy tzv. blok se provádí pouhým odsazením. Žádné složené závorky ani begin - end.
Jako příklad zde uvedu program na výpočet prvních N prvočísel.
1 #!/usr/bin/env python3
2 #
3 # Program vypíše prvních N prvočísel
4 #
5
6 N = int(input("Kolik: "))
7
8 poc=0 # počítadlo prvočísel
9 cislo = 2 # prvním kandidátem je číslo 2
10 prvocislo="Ano" # proměnná indikuje, zda jsem našel prvočíslo
11
12 # hlavní cyklus počítá, kolik mám prvočísel
13 while poc < N:
14 i=2
15 # zjišťuji zda je cislo prvočíslem
16 while cislo>i:
17 prvocislo = "Ano"
18 if (cislo%i) == 0:
19 prvocislo = "Ne" # pokud najdu dělitele nejde o prvočíslo
20 break # a vyskočím z cyklu
21 i+=1
22 if prvocislo == "Ano":
23 print(i," ",end='') # tisknu prvočíslo
24 poc += 1 # navýším počítadlo prvočísel
25 cislo += 1
26
27 # na konec vytisknu konec řádku
28 print("\n",end='')
Python disponuje množstvím kvalitních knihoven pro numerické, technické a vědecké výpočty a pro vizualizaci dat. Více se o tom rozepisuji v části Elektro(tech)?nika --> Technické výpočty.
Pro výuku programování se často používá tzv. želví grafika, kdy se želva jakoby pohybuje po písku a ocáskem do něj kreslí obrazce. V Pythonu lze želví grafiku velice jednoduše použít pomocí standardního modulu turtle.
Na tomto příkladu chci ukázat zápis podprogramů:
1 #!/usr/bin/python3
2
3 from turtle import *
4 import tkinter
5
6 ########### Definice funkcí ##################
7
8 # kreslí čtverec
9 def ctverec(a):
10 for i in range(4):
11 forward(a);
12 left(90)
13 return
14
15 # kreslí čtverec s středem uprostřed
16 def ctverecStred(a):
17 up()
18 right(90)
19 forward(a/2);
20 right(90)
21 forward(a/2);
22 down()
23 right(180)
24 for i in range(4):
25 forward(a);
26 left(90)
27 up()
28 left(90)
29 forward(a/2);
30 right(90)
31 forward(a/2);
32 down()
33 return
34
35 # kreslí čtverce v kruhu
36 def pootoceneCtverce(strana=80,pocet=24):
37 for i in range(pocet):
38 ctverec(strana)
39 right(360/pocet)
40 return
41
42 def pootoceneCtverceStred(strana=80,pocet=24):
43 for i in range(pocet):
44 ctverecStred(strana)
45 right(360/pocet)
46 return
47
48 # kreslí kružnice v kruhu
49 def pootoceneKruznice(strana=80,pocet=24):
50 for i in range(int(pocet) ):
51 pencolor("brown")
52 circle(0.8*strana)
53 right(360/pocet)
54 pencolor("black")
55 return
56
57 ################# Volání funkcí #######################
58
59 shape("turtle") # obrázek kresli želva
60 speed(6) # 1 pomalu, 10 rychle, 0 nejrychleji
61
62
63
64 pootoceneCtverceStred(190,11)
65 pootoceneCtverce(90,13)
66 #up()
67 #down()
68 pootoceneKruznice(90,12)
69 fillcolor("red")
70 stamp()
71 goto(80,120)
72 dot(50)
73
74 exitonclick() # click to exit
Želví grafika se často používá pro výuku rekurze:
1 #!/usr/bin/python3
2
3 import turtle;
4
5 turtle.speed(0)
6 turtle.shape("turtle")
7 turtle.up()
8 turtle.back(200)
9 turtle.down()
10
11
12 def zub(delka,pocet):
13 if pocet <= 0:
14 turtle.forward(delka)
15 else:
16 zub(delka/3,pocet-1)
17 turtle.left(60) # otočím želvu
18 if pocet <= 1:
19 turtle.forward(delka)
20 else:
21 zub(delka/3,pocet-1)
22 turtle.right(120) # otočím želvu
23 if pocet <= 2:
24 turtle.forward(delka)
25 else:
26 zub(delka/3,pocet-1)
27 turtle.left(60) # otočím želvu
28 if pocet <= 1:
29 turtle.forward(delka)
30 else:
31 zub(delka/3,pocet-1)
32
33 def vlocka(delka,pocet):
34 for i in range(6):
35 zub(delka,pocet)
36 turtle.right(60)
37
38 turtle.hideturtle()
39 zub(77,4)
40 #vlocka(50,3)
41
42 turtle.exitonclick()
Python si s sebou při instalaci automaticky nese grafickou knihovnu Tk. Tato knihovna je i přes svůj archaický vzhled poměrně výkonná a dává začínajícímu uživateli téměř vše, co by si mohl přát.
Pokut toužíte novějším vzhledu a chcete si dopřát trošku více možností a pohodlí jsou tu velice kvalitní knihovny GTK a Qt a jejich nadstavby pro Python PyGTK, PyQt nebo wxPython.
1 #!/usr/bin/env python3
2 # Soubor: easydrow.py
3 # Datum: 16.02.2011 07:30
4 # Autor: Marek Nožka, nozka <@t> spseol <d.t> cz
5 # Licence: GNU/GPL
6 # Úloha: Jednody
7 ############################################
8
9 # modul GUI TCL/TK
10 from tkinter import *
11 # modul želví grafiky
12 import turtle
13
14
15 #####################################################
16 ################# Definice funkcí ###################
17 #####################################################
18
19 # Přesunu želvu na zadané souřadnice
20 def presun(x,y):
21 turtle.onscreenclick(None)
22 turtle.goto(x,y)
23 turtle.onscreenclick(presun)
24
25 def turtleClear():
26 turtle.clear()
27
28 def turtleUp():
29 turtle.up()
30
31 def turtleDown():
32 turtle.down()
33
34 def close():
35 turtle.bye()
36 hlavni.destroy()
37
38
39 #####################################################
40 ################# GUI ###################
41 #####################################################
42 turtle.shape("turtle")
43 turtle.onscreenclick(presun)
44
45 # hlavní okno
46 hlavni=Tk()
47
48 # vytvoří ovládací prvky a přiřadí událostem funkce
49 tlClear = Button(hlavni, text='Clear', command=turtleClear)
50 tlClear.pack()
51 tlUp = Button(hlavni, text='Up', command=turtleUp)
52 tlUp.pack()
53 tlDown = Button(hlavni, text='Down', command=turtleDown)
54 tlDown.pack()
55 tlClose = Button(hlavni, text='Close', command=close)
56 tlClose.pack()
57
58 # smyčka čekající na události
59 hlavni.mainloop() # spustíme/zobrazíme celý program
60