Kihagyás

1. gyakorlat

A Bíróhoz való belépés ellenőrzése, szükség esetén a problémák megoldása. Aki nem tette volna meg korábban, az regisztráljon a Bíróba ezen a linken. Ha valaki nem biztos abban, hogy már regisztrált, az inkább regisztráljon újra.

A gyakorlat anyaga

A követelmények ismertetése.

Ezen a gyakorlaton áttekintjük a szkriptnyelvek általános jellemzőit, majd elkezdünk megismerkedni a Python nyelvi alapjaival a parancssori értelmező használatán keresztül.

Fordított nyelvek és szkriptnyelvek

A Programozás Alapjai kurzuson a C programozási nyelvvel ismerkedtünk meg. Ez a nyelv az úgynevezett fordított nyelvek családjába tartozik:

  • A forráskódot gépi kódra fordítjuk le, és az így kapott, lefordított (bináris) kódot használjuk
  • A fordításhoz szükségünk van egy fordítóprogramra (compiler)
  • Fordítás közben optimalizálás is történik, ennek köszönhetően a kód futásideje gyors, kisebb tárterületen is elfér, kevesebb memóriát használ
  • A kód mindig az adott architektúrára fordul le, így az erősen platformfüggő lesz.

A kurzuson tárgyalt Python és JavaScript nyelvek a programozási nyelvek egy másik csoportjába, a szkriptnyelvek (interpretált nyelvek) közé tartoznak:

  • Hiányzik a fordítás és linkelés folyamata, a forrásfájllal nem történik semmi
  • Nincs szükség fordítóprogramra, viszont kell egy értelmező (interpreter)
  • Nincs optimalizáció, így a kód futásideje lassabb, mint a fordított nyelvek esetén
  • A nyelv legtöbbször platformfüggetlen.

A Python főbb jellemzői

A félév első felében a Python programozási nyelvvel fogunk megismerkedni. Az alábbiakban a nyelv néhány fontosabb jellemzőjét soroljuk fel.

  • A szkriptnyelvek közé tartozik
  • Nyílt forráskódú (open-source)
  • Operációs rendszer független
  • Egyszerű, intuitív szintaxisának köszönhetően könnyen tanulható
  • Széleskörű felhasználási lehetőségek:
    • parancssori szkriptek
    • asztali alkalmazások
    • webes alkalmazások
    • beágyazott rendszerekre írt alkalmazások (pl.: Raspberry PI)
  • A szekvenciális, funkcionális és objektumorientált programozási paradigmákat is támogatja
  • A Javából ismerős szemétgyűjtésnek köszönhetően Pythonban nem a programozó feladata a memóriakezelés (garbage collector)

A Python telepítése

A Python kapcsán két fő fejlesztési ágat különböztetünk meg: a Python 2-t és a Python 3-at. A két nyelvi változat közötti főbb különbségek az előadáson kerülnek tárgyalásra. Mi ezen a kurzuson az újabb verzióval, a Python 3-mal fogunk foglalkozni.

Feladat

Telepítsük az otthoni gépünkre a Python 3 legfrissebb verzióját!

Telepítés Windows alatt

Látogassunk el a Python weboldalára, és töltsük le innen a telepítő fájlt. Ügyeljünk arra, hogy Python 3-as verziót töltsünk le! Futtassuk a letöltött telepítőt, és a telepítési utasítások követésével telepítsük a Pythont a gépünkre.

A telepítés során pipáljuk be az alábbi ábrán látható, pirossal bekeretezett jelölőnégyzetet. Ez automatikusan hozzáadja a Pythont a PATH környezeti változóhoz, így majd parancssorból is tudjuk használni azt.

Python telepítő

Természetesen, ha ez esetleg elmarad, akkor sincs komoly probléma, mindösszesen kézzel kell felvenni a PATH környezeti változóba a Python útvonalát.

Telepítés Linux alatt

Nyissunk egy terminált, majd adjuk ki a következő parancsot: sudo apt-get update && sudo apt-get install python3.8.

A telepítés sikerességének ellenőrzése

A telepítés után a terminálban (Windows alatt parancssorban) adjuk ki a python --version parancsot. Ha a parancs kimenete a telepített Python verziószáma, akkor a telepítés sikeres volt.

Figyelem

Ha a python --version parancs kimeneteként kapott alapértelmezett Python verzió nem a Python 3, hanem a Python 2, akkor a python helyett használjuk a python3 parancsot!

A parancssori Python értelmező

Ezen a gyakorlaton a Python parancssori értelmező segítségével fogunk megismerkedni a Python nyelvi alapjaival.

A parancssori Python értelmező elindításához adjuk ki a terminálban a python parancsot. Abban az esetben, ha az alapértelmezett Python verziónk nem Python 3, akkor ehelyett használjuk itt is a python3 parancsot.

Az indítást követően interaktív módon használhatjuk az értelmezőt: Python parancsokat adhatunk ki, amelyeket az interpreter folyamatosan értelmez, amíg ki nem lépünk.

A parancssori értelmezőből EOF karakterrel tudunk kilépni:

  • Windows alatt: Ctrl + Z
  • Linux alatt: Ctrl+ D.

A kilépésre használhatjuk még az exit() és quit() utasításokat is.

Python alapok

Kommentek

Pythonban is írhatunk a kódba kommenteket (megjegyzéseket). Egysoros kommentet # után írhatunk, míg több soros kommentet három darab idézőjel között adhatunk meg.

1
2
3
4
5
6
# ez egy egysoros komment

"""
    ez egy több
    soros komment
"""

Pythonban a három idézőjeles szintaxist egyébként több soros szövegkonstansok megadására is szoktuk használni.

1
2
3
4
szoveg = """Never gonna give you up
Never gonna let you down
Never gonna run around
And desert you"""

Kiíratás

Ha Pythonban ki szeretnénk valamit íratni a standard outputra, akkor a print() beépített függvényt tudjuk használni.

A python (vagy szükség esetén python3) paranccsal indítsuk el a parancssori Python értelmezőt, majd adjuk ki az alábbi utasítást:

1
print("Hello World!")

Kimenet

Hello World!

Az Enter lenyomása után valóban megjelenik a konzolon a "Hello World!" szöveg.

A print() függvényt egyébként több paraméterrel is meghívhatjuk. Ekkor a függvény ezeket a paramétereket sorban, (alapértelmezett módon) szóközzel elválasztva írja ki.

1
print("Most", "már", 5, "paraméterünk", "van")

Kimenet

Most már 5 paraméterünk van

Alapvető adattípusok

Az alábbiakban röviden áttekintjük a Python legalapvetőbb adattípusait és azok jellemzőit.

A bool típus

Logikai adattípus. Értéke True vagy False lehet. Fontos, hogy mindkét kulcsszó érzékeny a kis- és nagybetűkre (tehát pl. a Javából ismert csupa kisbetűs true nem fog működni).

Az int típus

Az egész számok típusa. A típusra vonatkozóan nincs méretkorlát. Korábban volt külön long és int típus, viszont ezeket Python 3-ban egybevonták.

A float típus

A lebegőpontos (valós) számok típusa. Pythonban is tizedespontot használunk tizedesvessző helyett a valós számok megadásakor (pl. 3.14).

Az str típus

Szöveges adattípus, string. C-vel és Javával ellentétben Pythonban nincs külön karakter adattípus (az egy karakterből álló szöveg is szöveges típusú lesz).

Pythonban szövegeket általában idézőjelek ("...") vagy aposztrófok ('...') között adunk meg.

Szövegek összefűzésére a + (plusz) operátort használjuk.

1
print('Hello ' + "Python")

Kimenet

Hello Python

Egy érdekes Python feature a szövegek többszörözése. Ha egy szöveget beszorzunk egy számmal (* operátor), akkor a szöveg a szám által meghatározott alkalommal íródik ki.

1
2
3
print("ha" * 5)
print(5 * "ha")
print("NA" * 10 + " BATMAN")

Kimenet

hahahahaha hahahahaha NANANANANANANANANANA BATMAN

Egyéb adattípusok

Ezeken kívül vannak még Pythonban további adattípusok is (lista, tuple, halmaz, dictionary, komplex szám stb.). Ezek egy részével később fogunk megismerkedni.

Változók

Természetesen Pythonban is tudunk létrehozni változókat.

A C-ben megszokottakkal ellentétben Pythonban nincs lehetőségünk külön változódeklarációra; Pythonban ugyanis egy változó akkor jön létre, amikor először értéket adunk neki. Az értékadásra a szokásos = (egyenlőségjel) operátort használjuk.

1
2
# változó létrehozása és értékadás
az_en_valtozom = "valami szöveg"        

A változók elnevezésre vonatkozóan van néhány szabály, amelyet szem előtt kell tartanunk:

  • A változónév csak betűket, számokat és alulvonás karaktert (_) tartalmazhat
  • A változónév csak betűvel vagy alulvonással kezdődhet (nem kezdődhet számmal)
  • A változónév tartalmazhat ékezeteket, azonban ezt célszerű kerülni
  • A változónév érzékeny a kis- és nagybetűkre (tehát pl. foo, Foo és FOO három különböző változónak számít).
  • A változónév természetesen nem lehet kulcsszó (pl.: class, except, stb.)
1
2
3
4
5
desszert = "palacsinta"
Desszert = "tiramisu"

print(desszert)  # a változónév kis- és nagybetűérzékeny!
print(Desszert)

Kimenet

palacsinta tiramisu

Egy érdekesség, hogy Pythonban ugyanaz a változó akár eltérő típusú értékeket is tárolhat.

1
2
3
val = 42     
val = 12.345 
val = "sajt" 

Például a fenti kódban a val változó kezdetben egy egész számot, majd egy valós számot, később pedig egy szöveget tárol. Ezt a jelenséget dinamikusan típusosságnak nevezzük.

Azt, hogy egy változó éppen milyen típusú adatot tárol, egyszerűen lekérdezhetjük a type() függvény segítségével.

1
2
val = "Ez egy szöveg"
print(type(val))

Kimenet

<class 'str'>

Alapvető operátorok

A Python nyelv fontosabb operátorai:

Kategória Operátorok
Aritmetikai operátorok +, -, *, /, //, %, **
Hozzárendelő operátorok =, +=, -=, *=, /=
Összehasonlító operátorok ==, !=, <, <=, >, >=
Logikai operátorok and, or, not

A legtöbb operátor a C-ben és Javában tanultakkal megegyező módon viselkedik. Néhány operátor viszont a megszokottaktól eltérő módon működik:

  • A / operátor mindig (egész operandusok esetén is) lebegőpontos osztást végez
  • Egészosztást a // (dupla per) operátorral végezhetünk
  • Hatványozásra a ** (dupla csillag) operátor alkalmas
  • A logikai operátorok eltérnek a C-ben megszokottaktól: and (logikai ÉS), or (logikai VAGY), not (logikai tagadás).
1
2
3
print(5 / 2)     # lebegőpontos (valós) osztás
print(5 // 2)    # egész osztás
print(5 ** 2)    # hatványozás

Kimenet

2.5 2 25

Inkrementálás, dekrementálás

Fontos megjegyezni, hogy a C-ben és Javában tanult inkrementáló és dekrementáló operátorok, vagyis a ++ és a -- Pythonban nem léteznek (sem prefix, sem posztfix formában).

1
2
3
4
szam = 10
szam++          # ez nem fog működni

# értelemszerűen a szam-- sem működne

Kimenet

File "<stdin>", line 1 szam++ ^ SyntaxError: invalid syntax

Ezek helyett használjuk a += 1, illetve -= 1 utasításokat az érték 1-gyel való növeléséhez, illetve csökkentéséhez.

1
2
3
4
5
6
7
szam = 10

szam += 1       # érték megnövelése 1-gyel
print(szam)

szam -= 1       # érték csökkentése 1-gyel
print(szam)

Kimenet

11 10

Típuskonverzió

Pythonban szükségünk lehet arra, hogy egy adatot más típusra konvertáljunk.

Ha egy szöveget egész számmá akarunk alakítani, akkor az int() függvényt használjuk.

1
int("42")           # 42

Ha egy szöveget lebegőpontos számra szeretnénk konvertálni, a float() függvény használatos.

1
float("3.14")       # 3.14

Pythonban van egy olyan szabály, hogy szöveget csak szöveggel lehet összefűzni. Amennyiben egy szöveget nem szöveg típusú adattal akarunk összefűzni, akkor hibát kapunk.

1
print("Az élet értelme: " + 42)

Kimenet

Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate str (not "int") to str

Ekkor a nem szöveges típusú adatot először szöveggé kell konvertálnunk az str() függvénnyel.

1
print("Az élet értelme: " + str(42))

Kimenet

Az élet értelme: 42

Beolvasás a konzolról

Ha Pythonban adatot szeretnénk beolvasni a felhasználói bemenetről, akkor az input() függvény lesz a barátunk. A függvény visszatér a beolvasott adattal, így egyszerűen eltárolhatjuk azt egy változóban, ha szeretnénk.

Az input()-nak opcionálisan átadható egy szöveges paraméter is. Ez a szöveg az input adat beolvasásakor jelenik meg, így ezt általában arra használjuk, hogy tájékoztassuk a felhasználót, hogy milyen bemeneti adatot vár a programunk.

Fontos megjegyezni, hogy az input() függvény mindig egy szöveget olvas be, amit szükség esetén más típusra kell konvertálnunk.

1
2
nev = input("Hogy hívnak? ")    # input adat eltárolása változóban
print("Szia " + nev)

Kimenet

Hogy hívnak? Tamás Szia Tamás

Példa: Olvassunk be két egész számot a felhasználói inputról, és írassuk ki az összegüket.

1
2
3
4
5
6
7
8
a = input("Első szám: ")         # beolvasás
b = input("Második szám: ")

a = int(a)                       # konvertálás egész számra
b = int(b)

sum = a + b
print("Az összeg: " + str(sum))  # konvertálás stringre

Kimenet

Első szám: 5 Második szám: 2 Az összeg: 7

Feladatok

  1. Készíts egy programot, ami bekéri a felhasználó adatait változóban, majd soronként kiírja azt.

Utolsó frissítés: 2020-09-09 19:08:57