Alapok
Először használjuk interaktívan a Python értelmezőt és ismerkedjünk meg az adattípusokkal, egyszerű
kifejezésekkel. A >>> a Python prompt, ezután írjuk be az utasításainkat.
>>> 5 * 4
20
>>> 3**4 # hatványozás
81
>>> (2 + 8) / 3 # egész osztás
3
>>> (2 + 8) / 3.0 # lebegőpontos osztás
3.3333333333333335
>>> 56.12 // 12.34 # egész osztás
4.0
A Python a # karakter utáni szöveget a sor végéig megjegyzésnek értelmezi.
A kiszámított értékeket változókban megőrizhetjük, ilyenkor nem jelenik meg a művelet eredménye.
>>> a = 5 * 4
>>> print a # Python 3-ban print(a)
20
>>> l = True # Logikai érték True vagy False
>>> c = None # A None a definiálatlan értéket jelenti
>>> s = 'Hello world' # karakterlánc, dupla aposztróf is jó
Python-ban nincs automatikus típus konverzió a változókra, konstansokra. A type függvénnyel le tudjuk
kérdezni egy változó típusát.
>>> b = '16'
>>> a + b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> type(a) # változó típus
<type 'int'>
>>> type(b)
<type 'str'>
>>> type(b) is str # is operátor
True
>>> a + int(b)
36
>>> a * b # Karakterlánc többszörözése!
'1616161616161616161616161616161616161616'
>>> s[0] # Karakterlánc első eleme
'H'
>>> s[-1] # Karakterlánc utolsó eleme
'd'
>>> s[0] = 'h' # Karakterlánc nem módosítható
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment
>>> s[:5] # Első 5 karakter
'Hello'
>>> s[6:] # Karakterlánc vége
'world'
>>> s[-5:]
'world'
>>> s[6:8]
'wo'
>>> len(s) # Karakterlánc hossza
11
>>> s[:5] + ' Dolly'
- 2 -
'Hello Dolly'
>>> c = 1
>>> a, c = c, a # két változó tartalom cseréje
A matematikai függvények (sin, cos, stb.) egy modulban találhatók (math).
>>> sin(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'sin' is not defined
>>> import math
>>> math.sin(1) # radián!
0.8414709848078965
>>> print '%6.4f' % math.sin(1) # formatizálás
0.8415
Modulokat kétféleképpen importálhatunk. Az import modul_név parancs használata esetén a modul
elemeire úgy hivatkozhatunk, hogy elé írjuk a modul nevét. A másik módszer esetén
from modul_név import elem, nem kell a modul nevét használnunk a modul elemére hivatkozásnál,
viszont ilyenkor könnyen név ütközés fordulhat elő.
>>> from math import sin
>>> sin(1)
0.8414709848078965
Ez utóbbi változat esetén vesszővel elválasztva a modul több felhasználandó elemét is megadhatjuk vagy *
karakterrel az összes elemet importálhatjuk (pl. from math import *).
Adatszerkezetek
Az egyszerű változók mellett listákat is használhatunk. A lista egy rendezett adathalmaz, elemeire 0-tól
kezdődő index-szel hivatkozhatunk.
>>> l1 = [] # Üres lista
>>> l2 = ['alma', 5, 4] # Különböző adattípusok
>>> l2[0]
'alma'
>>> l2[1:] # Rész lista
[5, 4]
>>> len(l2) # Lista elemeinek száma
3
>>> l2[0] = 3 # Lista elemek módosíthatók
>>> l2[3] # Nem létező elem
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
>>> l2[3] = 5
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> l2.append(5) # Lista bővítése
>>> print l2
[3, 5, 4, 5]
>>> l2[0:3] = 1 # Lista részének cseréje
>>> print l2
[1, 5]
>>> del l2[0] # Lista elem törlése
>>> print l2
[5]
>>> l3 = [[1, 2], [6, 4]] # Listák listája
>>> l3[0][1]
2
- 3 -
>>> help(list)
Help on class list in module builtins:
...
Listák összefűzését a + művelettel végezhetjük el, a * operátor a karakterláncokhoz hasonlóan ismétlést
jelent. Az in művelettel megvizsgálhatjuk, hogy a lista tartalmaz-e egy elemet.
A listákkal kapcsolatban több függvényt használhatunk (például sorted, reversed, min, max) illetve
további metódusok tartoznak hozzá (pl. pop, sort, reverse).
A tuple2
egy nem módosítható lista, a listával azonos módon használható, kivéve a módosító utasításokat (a
karakterlánchoz hasonlóan).
>>> t = (65, 6.34)
>>> t.append(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
>>> t[0]
65
A listákkal, tuple-el kapcsolatban gyakran nagyon tömör kódot írhatunk az elemekkel végzendő műveletre.
Ezt angolul list comprehension-nak, magyarul lista értelmezésnek vagy feldolgozásnak mondhatjuk.
>>> l = [2, 6, -3, 4]
>>> [x**2 for x in l] # minden listaelem négyzete
[4, 36, 9, 16]
>>> [x**0.5 for x in l if x > 0] # pozitív listaelemek gyöke
>>> import math
>>> map(math.sin, l) # [math.sin(x) for x in l]
[0.9092974268256817, -0.27941549819892586, -0.1411200080598672,
-0.7568024953079282]
>>> [a for a in l if a%2] # páratlan számok a listából
[-3]
A karakterláncokból, listákból tuple-okból halmazokat képezhetünk, a halmazokban ugyanaz az elem nem
ismétlődhet.
>>> a = "abcabdseacbfds"
>>> s = set(a)
>>> s
set(['a', 'c', 'b', 'e', 'd', 'f', 's'])
>>> b = (1, 3, 2, 4, 3, 2, 5, 1)
>>> t = set(b)
>>> t
set([1, 2, 3, 4, 5])
>>> c = ['alma', 'szilva', 'barack', 'alma']
>>> u = set(c)
>>> u
set(['barack', 'szilva', 'alma'])
A halmazokkal műveleteket is végezhetünk.
>>> a = set('abcdefgh')
>>> b = set('fghijklm')
>>> a – b # halmazok különbsége
set(['a', 'c', 'b', 'e', 'd'])
>>> a | b # halmazok uniója
set(['a', 'c', 'b', 'e', 'd', 'g', 'f', 'i', 'h', 'k', 'j', 'm', 'l'])
>>> a & b # halmazok metszete
set(['h', 'g', 'f'])
2 A tuple kifejezésre nincs elfogadott magyar fordítás, néhányan vektornak mondják, de az a listára is igaz lenne,
adatbáziskezelésben rekord értelemben használják, a matematikában használják rá a szám n-es kifejezést, de a Pythonban nem
csak számokat tárolhat, ... Én maradtam a tuple-nél (kiejtése: tapló :)
- 4 -
>>> a ^ b # halmazok szimmetrikus különbsége
set(['a', 'c', 'b', 'e', 'd', 'i', 'k', 'j', 'm', 'l'])
A szótár egy rendezetlen adathalmaz (asszociatív tömb, hash tábla). A szótár elemei lehetnek listák és
további szótárak is.
>>> szotar = {} # Üres szótár
>>> szotar['elso'] = 4 # Egyszerűen bővíthető
>>> szotar[5] = 123 # szám is lehet index
>>> szotar['elso'] = 'alma' # Módosítható
>>> print szotar
{'elso': 'alma', 5: 123}
>>> 'elso' in szotar # Létezik ez az index?
True
>>> tomb = {(1,1): 2, (1,2): 4, (2,1): -1, (2,2): 6} # tuple az index
>>> tomb[1,1]
2
Az in műveletet halmazokra, listákra és tuple-okra is használhatjuk.
A Python értelmezőbő
Változó kiíratása
>>> n
7
>>> msg
"Mi újság ?"
>>> pi
3.14159
Értékadás és feltétel
>>> a = 150
>>> if (a > 100):
Ciklus
>>> a = 0
>>> while (a < 7): # (ne felejtsük el a kett spontot !) ő
... a = a + 1 # (ne felejtsük el a behúzást !)
... print a
Végtelen ciklus
Végtelen ciklus példája (kerülendő) : >>> n = 3 >>> while n < 5: ... print "hello !"
számok négyzete
a = 0 >>> while a < 12: ... a = a +1 ... print a , a**2
Fibonacci sorozat
>>> a, b, c = 1, 1, 1 >>> while c < 11 : ... print b, ... a, b, c = b, a+b, c+1
# Els Python script ő
# Fibonacci-sort írat ki, azaz egy olyan számsort, aminek minden tagja
# az el z két tag összege. ő ő
a, b, c = 1, 1, 1 # a & b az egymást követ tagok számolására valók ő
# c egy számláló
print 1 # az els tag kiíratása ő
while c<15: # összesen 15 tagot íratunk ki
a, b, c = b, a+b, c+1
print b
Lista előállítása (tömb)
>>> nap = ['hétf ', 'kedd', 'szerda', 1800, 20.357, 'csütörtök', 'péntek'] ő
>>> print nap
['hétf ', 'kedd', 'szerda', 1800, 20.357, 'csütörtök', 'péntek']
vagy
>>> nap = ['hétf ', 'kedd', 'szerda', 1800, 20.357, 'csütörtök', 'péntek'] ő >>> print nap[2] szerda >>> print nap[4] 20.357
input adatbekérés
print 'Írjon be valamilyen egész számot : ',
nn = input()
print nn, 'négyzete', nn**2
vagy még :
keresztnev = input('Írja be a keresztnevét (idéz jelben)') ő
print 'Jó napot, ', keresztnev
Függvény importálása
from math import *
hetes szorzótábla
>>> def tabla7():
... n = 1
... while n <11 :
... print n * 7,
... n = n+1
>>> tabla7()
>>> def tabla(alap):
... n = 1
... while n <11 :
... print n * alap,
... n = n + 1
>>> tabla(10)
if a !=2:
print 'vesztett'
elif a ==3:
print 'egy kis türelmet kérek'
else :
print 'nyert'
a = 5
b = 2
if (a==5) & (b<2):
print '"&" jelentése "és"; az "and" szót is használhatjuk '
b)
a, b = 2, 4
if (a==4) or (b!=4):
print 'nyert'
elif (a==4) or (b==4):
print 'majdnem nyert'
c)
a = 1
if not a:
print ' nyert'
elif a:
print 'vesztett
>>> a = 1
>>> while a <20:
... tabla(a)
... a = a +1
gömb térfogata
def cube(n):
return n**3
def gombTerfogat(r):
return 4 * 3.1416 * cube(r) / 3
r = input('Írja be a sugár értékét : ')
print 'A gömb térfogata :', gombTerfogat(r)
Rajzoló modul hívása
from turtle import *
def negyzet(meret, szin):
"meghatározott méret és szín négyzetet rajzoló függvény" ű ű
color(szin)
c =0
while c <4:
forward(meret)
right(90)
c = c +1
elmentés után
from teknos_rajz import *
up() # fölemeli a ceruzát
goto(-150, 50) # balra felmegy
# tíz piros, sorbarendezett négyzetet rajzol:
i = 0
while i < 10:
down() # leteszi a ceruzát
negyzet(25, 'red') # egy négyzetet rajzol
up() # fölemeli a ceruzát
forward(30) # távolabb megy
i = i +1
a = input() # vár
Tkinter meghívása ablak és gomb előállítása
from Tkinter import *
>>> from Tkinter import *
>>> abl1 = Tk()
>>> tex1 = Label(abl1, text='Jó napot kívánok!', fg='red')
>>> tex1.pack()
>>> gomb1 = Button(abl1, text='Kilép', command = abl1.destroy)
>>> gomb1.pack()
>>> abl1.mainloop()
# Tkinter grafikus könyvtárat alkalmazó gyakorlat
from Tkinter import *
from random import randrange
# --- az eseménykezel függvények definíciója : --- ő
def drawline():
"Vonal rajzolása a can1 canvasra (vászonra)"
global x1, y1, x2, y2, color
can1.create_line(x1,y1,x2,y2,width=2,fill=color)
# a koordináták módosítása a következ egyenes számára : ő
y2, y1 = y2+10, y1-10
def changecolor():
"a rajz színének véletlenszer megváltoztatása" ű
global color
pal=['purple','cyan','maroon','green','red','blue','orange','yellow']
c = randrange(8) # => véletlenszám generálása 0 és 7 között
color = pal[c]
#------ F program ------- ő
# a következ változókat globális változókként használjuk : ő
x1, y1, x2, y2 = 10, 190, 190, 10 # az egyenes koordinátái
color = 'dark green' # az egyenes színe
# A f -widget létrehozása ("master") : ő
abl1 = Tk()
# a "slave" widget-ek létrehozása :
can1 = Canvas(abl1,bg='dark grey',height=200,width=200)
can1.pack(side=LEFT)
gomb1 = Button(abl1,text='Kilép',command=abl1.quit)
gomb1.pack(side=BOTTOM)
gomb2 = Button(abl1,text='Vonalat rajzol',command=drawline)
gomb2.pack()
gomb3 = Button(abl1,text='Más szín',command=changecolor)
gomb3.pack()
abl1.mainloop() # eseményfogadó indítása
abl1.destroy() # az ablak (destruction) zárása
Váltás rajzok között
from Tkinter import *
def circle(x, y, r, color ='black'):
"r sugarú (x,y) középpontú lör rajzolása"
can.create_oval(x-r, y-r, x+r, y+r, outline=color)
def figure_1():
"celtablat rajzol"
# el ször a meglév rajz törlése : ő ő
can.delete(ALL)
# a két egyenes rajzolása (függ. és vizsz.) :
can.create_line(100, 0, 100, 200, fill ='blue')
can.create_line(0, 100, 200, 100, fill ='blue')
# több koncentrikus kör rajzolása :
radius = 15
while radius < 100:
circle(100, 100, radius)
radius += 15
def figure_2():
"egyszer sített arc rajzolása" ű
# el ször minden meglév rajz törlése : ő ő
can.delete(ALL)
# minden kör jellemz jét listák listájába ő
# tesszük :
cc =[[100, 100, 80, 'red'], # fej
[70, 70, 15, 'blue'], # szem
[130, 70, 15, 'blue'],
[70, 70, 5, 'black'],
[130, 70, 5, 'black'],
[44, 115, 20, 'red'], # arc
[156, 115, 20, 'red'],
[100, 95, 15, 'purple'], # orr
[100, 145, 30, 'purple']] # száj
# az osszes kort egy ciklus segitsegevel rajzoljuk meg :
i =0
while i < len(cc): # a lista bejárása
el = cc[i] # minden elem maga is lista
circle(el[0], el[1], el[2], el[3])
i += 1
##### F programm : ############ ő
window = Tk()
can = Canvas(window, width =200, height =200, bg ='ivory')
can.pack(side =TOP, padx =5, pady =5)
b1 = Button(window, text ='1. ábra', command =figure_1)
b1.pack(side =LEFT, padx =3, pady =3)
b2 = Button(window, text ='2. ábra', command =figure_2)
b2.pack(side =RIGHT, padx =3, pady =3)
window.mainloop()
from Tkinter import *
abl1 = Tk()
# a 'Label' és 'Entry' widgetek létrehozása:
txt1 = Label(abl1, text ='Els mez :') ő ő
txt2 = Label(abl1, text ='Második :')
txt3 = Label(abl1, text ='Harmadik :')
mezo1 = Entry(abl1)
mezo2 = Entry(abl1)
mezo3 = Entry(abl1)
# egy bitmap képet tartalmazó 'Canvas' widget létrehozása :
can1 = Canvas(abl1, width =160, height =160, bg ='white')
photo = PhotoImage(file ='Martin_p.gif')
item = can1.create_image(80, 80, image =photo)
# laptördelés a'grid' metódus segítségével :
txt1.grid(row =1, sticky =E)
txt2.grid(row =2, sticky =E)
txt3.grid(row =3, sticky =E)
mezo1.grid(row =1, column =2)
mezo2.grid(row =2, column =2)
mezo3.grid(row =3, column =2)
can1.grid(row =1, column =3, rowspan =3, padx =10, pady =5)
# indítás :
abl1.mainloop()
lottó
import random
hány_számból = 90
hány_számot = 5
random.seed() #Inicializálás
halmaz=set()
while len(halmaz)<hány_számot:
halmaz.add (random.randint(1,hány_számból))
számlista = sorted(list(halmaz)) #Tárolás további felhasználásra
print("A heti lottószámok: ", ", ".join(str(szám) for szám in számlista))
#Ennél egyszerűbben kiírathatnánk a print (számlista) utasítással,
#csak ottmaradna a szögletes zárójel.
Másodfokú egyenlet megoldása
import math, cmath
a= input('Kérem a másodfokú egyenlet főegyütthatóját: ')
a= float(a)
while a==0:
print('Ez nem lesz másodfokú egyenlet; nem oldom meg.')
a= input('Kérem a másodfokú egyenlet főegyütthatóját: ')
a= float(a)
b= input('Kérem az elsőfokú tag együtthatóját: ')
c= input('Kérem a konstans tagot: ')
b= float(b)
c= float(c)
d= b*b-4*a*c
print('A diszkrimináns értéke', d)
if d>=0:
print('Van valós megoldás.')
x1= (-b-math.sqrt(d))/(2*a)
x2= (-b+math.sqrt(d))/(2*a)
print('Az egyik megoldás', x1)
print('A másik megoldás', x2)
else:
print('Nincs valós megoldás.')
x1= (-b-cmath.sqrt(d))/(2*a)
x2= (-b+cmath.sqrt(d))/(2*a)
print('Az egyik megoldás', x1)
print('A másik megoldás', x2)
http://harp.pythonanywhere.com/python_doc/tutorial/index.html
http://pythontutorial.pergamen.hu/
http://pythontutorial.pergamen.hu/downloads/tut.pdf
http://mek.oszk.hu/08400/08435/08435.pdf
https://tutorial.djangogirls.org/hu/python_introduction/
http://www.agt.bme.hu/gis/python/python_oktato.pdf