1. előadás

Tartalom: Python bevezetés, Python 2 vs Python 3, IDE, egyszeru matematika, változók, szintaxis, és logika, ciklusok I., string I.

A Python egy népszeru, általános célú, magas szintu szkript nyelv, melyet Guido van Rossum holland programozó publikált 1991-ben. A Python keresztplatformos nyelv, futtatókörnyezete több operációs rendszeren (Windows, Linux, OsX, Android) elérheto. A népszeruségéhez nagyban hozzájárul számos kiegészítocsomagja, mint a késobb tárgyalandó numpy, matplotlib, TensorFlow, pyQT, openCV, iPython, stb.

A Pythont tanuláshoz és egyszerubb esetekben használhatjuk interaktívan is, az értelmezovel soronként végrehajttathatjuk az utasításainkat. Persze lehetoségünk van .py kiterjesztésu fájlokat készíteni és futtatni is, sot lehet generálni futtatható fájlt vagy telepítot. Egyelore viszont maradjunk az alapoknál, ismerkedjünk a szintaktikával és az egyszeru matematikával.

Megjegyzés: az eloadások során a Jupyter notebookot fogjuk használni ez interaktív python notebook (.ipynb) fájlokat hoz létre, amiben a kódok és kimenetek szerkeszthetoek, illetve GitHub-on a legutolsó futás lesz látható. A gyakorlati .py kiterjesztésu fájlokhoz a Jupyter notebook nem fog kelleni, ez csak a demonstrációt könnyíti meg.

Python 2 vs Python 3

Sajnos a Python még relatív széles körben használt 2.x változata, és a 2008 óta elérheto 3.x változat között nincs teljes kompatibilitás. Tehát, ha például az interneten ilyen kóddokat találunk:

print "Hello, World!"

gyaníthatjuk, hogy Python 2.x -el van dolgunk. Ugyanez a kód Python 3.x-ben így néz ki:

print("Hello, World!")

Errol még lesz szó, egyelore annyit kell tudnunk, hogy ez a segédlet a 3.x verzióval lett tesztelve.

In [1]:
# mivel a Python 2.x és 3.x szintakitiája enyhén eltér ellenorizzük, hogy a 3-ast használjuk-e
# késobb további magyarázat lesz ezekrol is
import platform
print(platform.python_version())
3.6.0

Térjük tehát rá a matematikai alapokra.

Egyszerű matematika

In [2]:
6 * 8 # szorzás
Out[2]:
48
In [3]:
2 ** 10 # hatványozás
Out[3]:
1024
In [4]:
100 / 3 # osztás
Out[4]:
33.333333333333336
In [5]:
100 // 3 # egész osztás
Out[5]:
33
In [6]:
52 % 10 # modulo osztás
Out[6]:
2

Pythonban a megszokott aritmetikai operátorok jelen vannak, sot további hasznosak is.

Operátor Leírás
+ összeadás
- kivonás
* osztás
** hatványozás
// egész osztás
/ osztás
% modulo osztás

A Python a # karakter utáni szöveget a sor végéig megjegyzésnek értelmezi, több soros megjegyzést 3 idézojellel vagy aposztróffal kezdhetünk és zárhatunk le.

"""
Ez több 
soros komment
"""
'''
Ez 
is.
'''

Változók

A változókba mentett értékek esetén interaktív módban nem jelenik meg a muvelet adott eredménye. Pl:

In [7]:
x = (3 ** 3 ) + 0.2

De kiírhatjuk például a print funkcióval

In [8]:
print(x)
27.2

Python-ban nincs automatikus típus konverzió a változókra, de a type függvénnyel kiírathatjuk egy változó típusát.

In [9]:
s = "1024"
type(s)
Out[9]:
str

A következo muveletben sincs automatikus típus konverzió, így hibát kapunk.

In [10]:
x + s
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-10-d5ea5704a10b> in <module>()
----> 1 x + s

TypeError: unsupported operand type(s) for +: 'float' and 'str'
In [11]:
type(s)
Out[11]:
str
In [12]:
type(s) is str 
Out[12]:
True
In [13]:
type(x)
Out[13]:
float

A Python alapvetoen 3 numerikus típust ismer: int, float és complex.

In [14]:
a1 = 120
print(type(a1))

a2 = 12.0
print(type(a2))

a3 = 5 + 1j
print(type(a3))

a4 = float(7)
print(type(a4))
<class 'int'>
<class 'float'>
<class 'complex'>
<class 'float'>

A sys.float_info.dig megadja a tizedesjegyek maximális pontosságát.

In [15]:
import sys
sys.float_info.dig
Out[15]:
15

A változóinkat integerré konvertálhatjuk, például így:

In [16]:
x + int(s)
Out[16]:
1051.2
In [17]:
s * 20  # ez nem megszorozza, hanem többszörözi
Out[17]:
'10241024102410241024102410241024102410241024102410241024102410241024102410241024'

Pythonban az osztályokat StudlyCaps a konstanasokat ALLCAPS a változókat, metódusokat pedig snake_case konvenccióval szokás jelölni.

String I.

Stringeket többféleképp definiálhatunk: például aposztróffal és idézojellel is.

In [18]:
s1 = "Ez az egyik mód."
s2 = 'De ez is muködik.'
print(s1, s2)
Ez az egyik mód. De ez is muködik.

Emlékezteto a karakterkódolásokról:

  • Az egybájtos karakterkódolások:
    • ASCII » 128 karakter, 7 bit (2^7 = 128)
    • Latin-1 » másnéven ISO8859-1 » az elso 128 ugyanaz, mint az ASCII, de, utána még 96 betut használ (160-255 tartományban), így is belefér az egy bájtba (2^8 = 256) » nincs benn magyar o és u csak ű és ő
    • Latin-2 » hasonló a Latin-1-hez, de ebben a magyar o és u is megtalálható
    • Windows-1250 » ez hasonlít a Latin-2-hez, többek közt a Windows szöveges fájok is használják, konzolos alkalmazásoknál elofordul.
    • OEM-852 » konzolban szintén elofordulhat, de nem hasonlít a Latin2-höz
  • A többbájtos karakterkódolások:
    • Unicode » A Unicode az elozoekkel ellentétben nem egyetlen szabvány, inkább egy szabványcsomag. Az elso 128 karaktere ugyanaz, az ASCII-é, de több, mint 120000 karaktert tartalmaz a világ majdnem összes nyelvén. Több bájtos, de az egybájtosról viszonylag könnyen átalakítható kódolás, de vissza már kevésbé, hiszen egy Unicode karakter nem biztos, hogy létezik pl.: Latin-2-ben. További probléma, hogy a 2 bájtot nem minden architektúra ugyanabban a sorrendben tárolja. Ezt a BOM (byte order mark) hivatott jelezni, mely vagy 0xFEFF vagy 0xFFFE. A Unicode szövegeket különbözo karakterkódolással tárolhatjuk. A Unicode szabvány meghatározza az UTF-8, UTF-16 és az UTF-32 karakterkódolást, de számos más kódolás is használatban van.
    • UTF-8 » Változó méretu karakterkódolás, 1 bájtos egységeket használ, így nem csak sorrendben, de tényleges bináris kódban is kompatibilis az ASCIIvel, hiszen az egy bájtba beleféro értékeket egy bájton is tárolja. Neve a 8-bit Unicode Transformation Format, 8 bites Unicode átalakítási formátum, ami utal arra, hogy bármilyen Unicode karaktert képes reprezentálni, gyakran használják internet-alapú karakterkódolásra.

A sys.getdefaultencoding() megadja, mi az alapértelmezett kódolás.

In [19]:
import sys
print(sys.getdefaultencoding())
utf-8

A különbség az aposztróffal és idézojellel készített stringek között, hogy

"ebben így lehet ' karakter" 
'ebben viszont \' kell a visszaper elé'

Formázott kiíratás

A prtint funckió rengeteg lehetoséget ad. Késobb erre még visszatérünk, most nézzük meg a sep elválasztó és az end muködését példákon szemléltetve.

In [20]:
print('a','b', 'c', 'da\'sda"as"sd--e')
print("a","b", "c", "deas'aaa'asd")
print("a","b", "c", "de", sep="")
print("a","b", "c", "de", sep="***")
print("x\ny")
print("Ez kerüljön", end=" ")
print("egy sorba.")
a b c da'sda"as"sd--e
a b c deas'aaa'asd
abcde
a***b***c***de
x
y
Ez kerüljön egy sorba.

Ciklusok I., alapvető szintaktika

Összetettebb kódsorok készítése elott ki kell emelni a Python azon sajátosságát, hogy a Python programokban a kód blokkokat a sor elején található szóközökkel vagy tabulátorokkal jelöljük. Más nyelvekben a blokk elejét és végét jelölik meg, például C-ben, C++-ban stb. '{' és '}' zárójelekkel. A nyelv ezen tulajdonsága kikényszeríti a könnyen olvasható kód készítését, másik oldalon nagyobb figyelmet igényel a sorok írásánál. A szóköz és tabulátor karaktereket nem lehet keverni, gyakran négy szóközös tagolást alkalmaznak.

In [21]:
print("range(6):   \t", end="")
# 0 1 2 3 4 5
for x in range(6):
    print("%4d" % x, end="")
    
print("\nrange(3, 9):   \t", end="")
# 3 4 5 6 7 8
for x in range(3, 9):
    print("%4d" % x, end="") 

print("\nrange(3,14,2):\t", end="")
# 3 5 7 9 11 13
for x in range(3, 14, 2):
    print("%4d" % x, end="")

print("\narray (tömb):\t", end="") 
primes = [2, 3, 5, 7] # ez egy tömb, késobb errol bovebben
for prime in primes:
    print("%4d"  % prime, end="")


print("\nwhile:          ", end="")
# 0  1  2  3  4 
i = 0
while i < 5:
    print("%4d" % i, end="")
    i += 1
range(6):   	   0   1   2   3   4   5
range(3, 9):   	   3   4   5   6   7   8
range(3,14,2):	   3   5   7   9  11  13
array (tömb):	   2   3   5   7
while:             0   1   2   3   4

Used sources / Felhasznált források