Bevezetés a Python programozásba
Fordítás- értelmezés • Interpretáció (értelmezés) Minden egyes alkalommal, amikor végre akarjuk hajtatni a programot, az interpreter programot kell használnunk. Ennél a technikánál a fordító a forrásprogram minden egyes elemzett sorát néhány gépi nyelvű utasításra lefordítja, amiket azonnal végre is hajt. Semmilyen tárgyprogram sem generálódik.
• Fordítás A teljes forrásszöveg egyszeri lefordításából áll. A fordító program elolvassa a forrásprogram összes sorát és egy új kódot állít elő, amit tárgykódnak hívunk. Ez utóbbit most már a fordítótól függetlenül végrehajtathatjuk és tárolhatjuk egy fájlban. (futtatható)
2
Az, hogy állandóan rendelkezünk egy interpreterrel, lehetővé teszi bármilyen kis programrészlet közvetlen tesztelését. Egy alkalmazás bármelyik alkotójának helyes működését igazolhatjuk annak létrehozását követően. • A lefordított bytecode interpretációja nem olyan gyors, mint egy igazi bináris kód, de számos program szamara, beleértve a grafikus programokat is, nagyon megfelel. • A bytecode portábilis. Ahhoz, hogy egy Python vagy egy Java program különböző gépeken végrehajtódjon elég ha mindegyik gépen rendelkezésre áll egy adaptált interpreter. 3
Számolás Pythonnal • • • • •
Python Shell indítása (IDLE) Interaktív üzemmód (értelmezőt használjuk) Prompt jele: >>> +, -, *, / , zárójelek, de egészosztás az alapértelmezett 20.0 / 3
4
Változónevek és foglalt szavak Változónév • • • • •
a - z , A - Z betűk es a 0 - 9 számok sorozata, aminek mindig betűvel kell kezdődni. Csak az ékezet nélküli betűk a megengedettek. A szóközök, a speciális karakterek, mint pl.: $, #, @, stb. nem használhatok. Kivétel a _ (aláhúzás). A kis- és nagybetűk különbözőnek számítanak. Ajánlás: csak a második, vagy további szó kezdőbetűje legyen nagybetű pl.: ár, összÁr, haviÖsszÁr Foglalt szavak nem lehetnek változó nevek:
5
Értékadás • Kapcsolatot teremt a változónév és a változó értéke (tartalma) között. • Egyenlőségjel reprezentálja: = • Memóriában 3 változónév és 3 bytesorozat keletkezett • Egy értékadó utasítás által kiváltott műveletek – – – –
Változónév létrehozása és bejegyzése a memóriába Változónévhez egy jól meghatározott típus rendelése Egy speciális érték létrehozása és tárolása a memóriában Kapcsolat létesítése a változónév és a megfelelő érték memóriahelye között 6
Változó értékének kiíratása 1. A billentyűzeten beírjuk a változó nevet, majd <Enter>. 2. Print utasítással Szigorúan csak a változó értékét írja ki, úgy ahogyan az kódolva van (nincs idézőjel!).
7
A változók típusadása • Dinamikus típusadás Nem szükséges a változók használata előtt a típusuk definiálása érdekében speciális programsorokat írni. Elég ha hozzárendelünk egy értéket egy változónévhez és automatikusan azzal a típussal hozza létre, ami a legjobban megfelel az értéknek. Egész Karakterlánc Lebegőpontos szám
8
Többszörös értékadás • Egyszerre több változóhoz rendelhetünk értékeket. • Egyetlen operator segítségével párhuzamosan is végezhetünk értékadást !! Tizedespont ↔ vessző 9
Feladat 1. Mi történik az alábbi példa három sorában?
1. Rendelje hozzá a 3, 5, 7 értékeket az a, b, c változókhoz. Végezze el az a - b/c műveletet. Matematikailag korrekt-e az eredmény ? Ha nem az, hogyan kell eljárni hogy az legyen ?
10
Operátorok és kifejezések • Az értékeket és a rájuk hivatkozó változókat (operandusok) operátorok segítségével kifejezésekké kombináljuk. • Minden egyes kifejezés kiértékelődik, amit megadunk, legyen az akármilyen bonyolult és ennek a kiértékelésnek az eredménye mindig egy érték. Ehhez az értékhez automatikusan hozzárendelődik egy típus, ami függ attól, hogy mi van a kifejezésben. A fenti példában y valós típusú lesz, mert a kiértékelt kifejezés legalább egy valós változót tartalmaz. • Operátorok +, -, *, /, ** (hatványozás), % (maradékos osztás), logikai operátorok, karakterláncokon működő operátorok, 11
Feladat
12
A műveletek prioritása Ha egy kifejezésben egynél több operátor van, akkor a műveletek végrehajtásának sorrendje a prioritási szabályoktól függ, melyek ugyanazok, mint amiket matematikából tanultunk : • • • • •
Zárójelek Hatványozás Szorzás, osztás Összeadás, kivonás Azonos prioritású operátorok végrehajtása balról jobbra történik. 13
Struktúrált programozás Böhm, Jacopini sejtése (1964) Minden algoritmikus program vezérlési szerkezete leírható 3 vezérlőszerkezet segítségével. – Szekvencia – Szelekció – Iteráció
Mills be is bizonyítja ezt a 70-es években.
14
Szekvencia Egymás után végrehajtandó tevékenységek sorozata.
15
Szelekció Lehetővé teszi a programvégrehajtás különböző irányokba történő átirányítását attól függően, hogy milyen feltételekkel találkozunk.
Zárójelek opcionálisak!
16
Többirányú szelekció
Megjegyzések: • Elif ágból több is lehet. • Az else ág nem kötelező.
17
Relációs operátorok Az if utasítás után kiértékelt feltétel a következő relációs operátorokat tartalmazhatja
Pl.:
fejsor, ami kettőspontra végződik Utasításblokk Pontosan egyforma Behúzások !!!
18
Logikai operátorok A logikai kifejezésekre alkalmazhatók a not (nem), az and (és) és az or (vagy) műveletek. Pl.: Döntsük el egy számról, hogy 20-tól kisebb és osztható-e 6-tal.
19
Egymásba ágyazott utasítások
• Csak akkor lesz kiírva az „ez egy macska”, ha az első 4 feltétel igaz. • A 6. sori üzenethez szükséges és elégséges, hogy az első két feltétel igaz legyen. • A 9. sor üzenetét mindig kiírja, mert egy szinten van az if-fel. 20
Általános szintaktikai szabályok • A sor végét a sorvégjel jelzi (Enter). Sem a képernyőn, sem a nyomtatott listákon nem jelenik meg.
• Utasításblokkot sem határolja speciális jel Akár egymás után is lehetnének az utasítások, viszont célszerű behúzásokkal, sorugrásokkal tagolni.
• A szóközöket figyelmen kívül hagyja a sor elején (kivéve az elsőt) és utasítások között • Megjegyzéssor: # !Két érték felcserélése: 21
Iteráció (ciklusok) Adott tevékenységek többszöri, ismételt végrehajtása.
• • •
A feltételben kiértékelt változónak a kiértékelést megelőzően léteznie kell. Ha a feltétel eredetileg hamis, akkor a ciklusmag soha nem fut le Ha a feltétel igaz marad → végtelen ciklus, ami kerülendő 22
Feladat 1. Írassuk ki az 1-től nagyobb és 12-től kisebb egész számokat a négyzetüket és köbüket.
23
Feladat 1. Írjon egy programot, ami kiíratja a 7-es szorzótábla első 20 tagját. 2. Írjon egy programot, mely 5-től kezdve kiírja minden 3. számot 30-ig. 3. Írassa ki a 2 50-től kisebb hatványait. 4. Írassuk ki 10-ig a szomszédos páros és páratlan számok szorzatát.
24
Szkript írása • • • • • •
IDLE (Integrated Development Environment) File / New Window A szkriptek elmentendők, *.py Szintaktika ellenőrzés: Run / Check Module Futtatása: Run / Run module enetek a Shell Output, hiba üzenetek a Shell ablakban
25
Ékezetek • A 2.3 verziótól kezdve a magyar nyelvet használóknak ajánlatos minden Python szkriptjük elejére beírni a következők egyikét (kötelezően az első vagy a második sorba) :
# -*- coding:Utf-8 -*# -*-coding:ISO-8859-2-*# -*- coding:Latin-2 -*26
Feladatok 1. Írjon programot, mely kiszámolja egy téglalap kerületét, területét, ha ismerjük az oldalait. 2. Írjon egy programot, ami átszámolja a kiindulásként megadott egészszámú másodpercet évekké, hónapokká, napokká, percekké és másodpercekké. (Használja a modulo operátort : % ). 3. Írjon egy programot, ami kiíratja a 7-es szorzótábla első 20 tagját, csillaggal jelölve azokat, amelyek 3-nak többszörösei. Példa : 7 14 21 * 28 35 42 * 49 4. Írjon egy programot, ami kiszámolja 13-as szorzótábla első 50 tagját, de csak azokat írja ki, melyek 7-nek többszörösei. 5. Írjon egy programot, ami a fenti jelsorozatot írja ki . 27
Beépített adattípusok 1. Numerikus adatok int, long, float, complex a beépített függvényeken kívül a math modul tartalmaz továbbiakat (kerekítések, abszolút érték, trigonometrikus függvények, logaritmus, szögfüggvények).
28
Beépített adattípusok 2. String Karakterek rendezett gyűjteménye. Sztring kezelése • Konkatenáció + • in operátor • Karakter elérése index-szel
29
Sztring kezelő függvények • Sztring hossza: len() • Egésszé konvertálás: int() • Valóssá konvertálás: float()
Továbbiak, mint objektum metódusok • • • • •
lower(), upper() find(k) : sztring pozícióját adja vissza count(k): k előfordulásainak száma split() join(lista) A szeparátor karakterre kell alkalmazni!
30
Sztring objektum metódusok • • • • •
capitalize() swapcase() strip() replace(c1, c2) index(c )
első előfordulás indexe A metódusok többségében megadható, hogy a karakterlánc csak bizonyos részét használja.
31
Feladatok 1.
Írjon egy programot, ami meghatározza, hogy egy karakterlánc tartalmazza-e az « e » karaktert (az in operátor használata nélkül).
2.
Írjon egy programot, ami megszámolja, hogy egy karakterlánc hányszor tartalmazza-e az « e » karaktert.
3.
Írjon egy programot, ami egy új változóba másol át egy karakterláncot úgy, hogy csillagot szúr be a karakterek közé. Így például, « víz »ből « v*í*z » lesz.
4.
Írjon egy programot, ami egy új változóba fordított sorrendben másolja át egy karakterlánc karaktereit. Például « labor »-ból « robal » lesz.
5.
Az előző gyakorlatból kiindulva írjon egy scriptet, ami meghatározza, hogy egy karakterlánc palindrom e (vagyis ami mindkét irányból olvasva ugyanaz), mint például « radar » vagy « sós ».
32
Listák • Összetett adattípus (a string is az) • Szögletes zárójelbe zárt, vesszővel elválasztott elemek csoportja • Listaelemek lehetnek különböző típusúak • Szekvencia, mint a string • Elemeire index-szel hivatkozhatunk • Elemei módosíthatóak
Lista kezelése Függvények • len() listában lévő elemek száma • del(index) index alapján elem törlése Metódusok • sort() lista rendezése • reverse() elemek sorrendjének megfordítása • index(i) elem indexének meghatározása • append(elem) lista végére beszúrja az új elemet • remove(elem) elem értéke alapján eltávolítás
Iteráció Pythonban a klasszikus növekményes ciklus nem létezik, helyette egy szekvenciát lehet hasonló elvek alapján bejárni a
for … in … utasítással.
35
Feladatok 1. Legyenek adottak a következő listák : t1 = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] t2 = ['Január', 'Február', 'Március', 'Április', 'Május', 'Június', 'Július', 'Augusztus', 'Szeptember', 'Október', 'November', 'December'] Írjon egy kis programot, ami egy új t3 listát hoz létre. Ennek felváltva kell tartalmazni a két lista minden elemét úgy, hogy minden hónap nevet követnie kell a megfelelő napok számának : ['Január',31, 'Február',28, 'Március',31, stb...]. 2.
Írjon egy programot, ami kiíratja egy lista összes elemét. Ha például a fenti gyakorlat t2 listájára alkalmaznánk, akkor a következőt kellene kapnunk : Január Február Március Április Május Június Julius Augusztus Szeptember Október November December
3.
Írjon egy programot, ami megkeresi egy adott lista legnagyobb elemét.
Feladatok 4.
Írjon egy programot, mely egy egész számokat tartalmazó listát szétbont két listára. Az egyik csak a páros, a másik csak a páratlan számokat tartalmazza.
5.
Írjon egy programot, mely egy szavakat tartalmazó listát szétbont két listára. Az egyik csak a 6 karakternél hosszabb, a másik a nem hosszabb szavakat tartalmazza.
6.
Van egy egész számokat tartalmazó lista, amiben egyes számok többször is előfordulnak. Írjon egy scriptet, ami a listát úgy másolja át egy másik listába, hogy figyelmen kívül hagyja a többszöri előfordulásokat. A végső lista legyen rendezett.
7.
Írjon egy scriptet, ami megkeresi egy adott mondatban a leghosszabb szót.
Elérési útvonalak megadása 1. ”C:/Python/Data” 2. ”C:\\Python\\Data” 3. r”C:\Python\Data” r: raw string Egyéni preferencia alapján válasszunk ki egyet és azt használjuk. 38
Modulok használata • Lehetővé teszi a beépített függvényeken kívül továbbiak használatát. • Leggyakoribb modul importálása: • Az importált modulbeli függvény használata: <modul>.
• Függvény ismertetése: • Függvények listázása • Egyetlen függvény importálása 39
Modulok használata
40
Felhasználói input input() • Olyan értéket ad vissza, aminek a típusa a felhasználó által beírt érték típusának felel meg. → Típusellenőrzés ! • Sztringet aposztrófok vagy idézőjelek között kell megadni.
raw_input() • Mindig karakterláncot ad vissza.
41
Feladatok 1. Ha beteszünk a bankba egy adott összeget, adott éves kamatszázalékra, adott hónapra, mennyi pénzt vehetünk majd fel lejártakor? 2. Kérjünk be egy 100-tól kisebb egész számot és írjuk ki kétszeresét ha 50-től kisebb páros szám. Nem megfelelő szám esetén folytassuk a bekérést, míg megfelelő nem lesz. 3. Olvassunk be egy nem negatív egész számot, valakinek az életkorát! Kortól függően írjuk ki a megfelelő szöveget: 0 – 13 évig: Gyermek 14 – 17 évig: Fiatalkorú 18 – 23 évig: Ifjú 24 – 59 évig: Felnőtt 60 évtől Idős 42
Feladatok 4.
5. 6.
Kérjük be egy telek oldalait méterben! Írd ki a telek területét négyszögölben! (1 négyszögöl = 3,6 m2 ). Ha a telek 100 négyszögölnél kisebb, akkor írja ki, hogy túl kicsi! Kérjük be Zsófi, Kati és Juli születési évét. Írd ki a neveket udvariassági sorrendben (előre az idősebbeket…)! Kérjünk be egy egész óra értéket. Ha a szám nem 0 és 24 óra között van, akkor adjon hibaüzenetet, egyébként köszönjön el a program a napszaknak megfelelően! 4-9: Jó reggelt!, 10-17: Jó napot!, 18-21: Jó estét!, 22-3: Jó éjszakát!
43
Léptető ciklus range([start,] stop [, step]) • Egészek listáját adja vissza, mely jól használható a for ciklusban
44
Feladatok 1. A felhasználó adott sugarú körök kerületére kíváncsi. Amikor Ę beüt egy sugarat, mi kiírjuk a kör kerületét. Ha már nem kíváncsi több eredményre, akkor a kör sugaránál nullát (végjelet) kell ütnie! 2. Adott két szám között hány darab prímszám van? Írjuk is ki őket! 3. Olvassuk be a számokat 0 végjelig, majd írjuk ki ezek összegét, darabszámát és átlagát! 4. Kérjünk be a felhasználótól számlaösszegeket! A bevitel befejeződik, ha az összegnél nullát ütnek. Írjuk ki a legnagyobb összegű számla sorszámát és összegét! 45
Véletlen számok A Python random modulja egész sor - különböző eloszlású – véletlen számokat generáló függvényt kínál. A modul összes függvényének importálása:
from random import *
random() nulla és 1 értékek közé eső véletlen valós szám
randrange(n) nulla és az argumentum eggyel csökkentett értéke közé eső egész számot ad visszatérési értékül
randrange(n, m) az első argumentum és az eggyel csökkentett második argumentum értéke közé eső szám
randrange(n, m, k) a harmadik argumentummal definiált intervallum határozza meg az értékek körét 46
Feladatok 1. Írjon egy programot, ami 20 dobást szimulál egy dobókocka esetén! Írja ki a dobások eredményét, majd a dobások átlagát! 2. Írjon egy programot, mely tippet ad a lottószámokra. Kérjük be, hogy 5-ös vagy 6-os lottóról van-e szó.
47