előző foglalkozás összefoglalása, ismétlő gyakorlatok változók elnevezése, értékadás, többszörös értékadás műveletek egész és tört számokkal, string-ekkel logikai változók és logikai műveletek típusátalakítás, néhány beépített függvény
Mi a program? utasítások sorozata valamilyen feladat megoldására amit egy számítógép hajt végre 2
Mi a programozás? programok készítése, mely általában a következő tevékenységeket jelenti: 1. feladat megértése 2. tervezés 3. kódolás 4. tesztelés 5. hibák javítása 6. továbbfejlesztés 3
Mi a programozási nyelv? programok írására szolgáló mesterséges nyelv utasításkészlet ( szótár ) szintaktikai szabályok ( nyelvtan ) sokféle programozási nyelv létezik pl. Scratch, Python, JavaScript, PHP, Java, C, Ada... 4
A Python nyelv és az IDLE környezet Python könnyen elsajátítható és használható sok előre megírt modult tartalmaz modul = hasznos programocskák halmaza nagy cégek is használják Google, Pixar, NASA,... IDLE (Integrated Development and Learning Environment) integrált fejlesztő és tanuló környezet alkalmas Python programok írására és futtatására 5
IDLE ablakok File New File vagy CTRL-N terminálablak (ebben fut a program) kódablak (ebben írjuk a programot) 6
IDLE ablakok terminálablak (ebben fut a program) Run Run Module vagy F5 kódablak (ebben írjuk a programot) Futtatás előtt az IDLE szeretné elmenteni a programot. Hozz létre egy könyvtárat, amibe Python programjaidat mented! A Python programok neve bármi lehet, a kiterjesztésük általában.py (például HelloWorld.py) 7
Változók egy változóra gondolhatsz úgy, mint egy névvel ellátott tárhelyre a változóban valamilyen értéket tárolhatsz (pl. egy számot vagy egy szöveget) szam = 6 print(szam) masikszam = 2*szam print(masikszam) szam = 18 print(szam) a tárolt értéket a változó nevének leírásával hívhatod elő a változó értékét bármikor felülírhatod 8
Adattípusok egyszerű beépített adattípusok egész szám (integer) tört (float) szöveg (string): "..." vagy '...' igaz/hamis (Boolean): True, False a = 5 b = 6.5 c = "szöveg" d = 'ez is szöveg' e = True c = -10 egy változó típusát nem kell előre megmondani, akkor dől el, amikor értéket kap! 9
Konzol input és output nev = input("hogy hívnak? ") kor = input("hány éves vagy? ") print("hello " + nev + "!") print("biztos jó " + kor + " évesnek lenni.") 10
Feltételes elágazás egy programrész végrehajtását feltételhez kötheted az if utasítással (az if jelentése magyarul ha) az if párja az else (jelentése egyébként); az else utáni programrész akkor hajtódik végre, ha az if feltétele nem teljesül Figyeld meg a behúzásokat! szam = int(input("írj be egy számot! ")) if (szam > 100): print("ez egy nagy szám.") else: print("ez egy kicsi szám.") Ügyelj a kettőspontra! 11
Feltételes elágazás Az azonos méretű behúzással rendelkező, egymás utáni sorok egy összetartozó blokkot alkotnak if <feltétel>: else: A <feltétel> egy kifejezés, melynek értéke igaz (True) vagy hamis (False) lehet Ez az utasításblokk hajtódik végre ha a <feltétel> igaz Ez az utasításblokk hajtódik végre ha a <feltétel> hamis 12
Feltételes elágazás if <feltétel>: igen <feltétel> igaz? nem else: 13
Ismétlés while ciklussal sokszor előfordul, hogy egy programrész végrehajtását addig kell ismételni, amíg valamilyen feltétel fennáll ezt a célt szolgálja a while ciklus (a while jelentése amíg): szam = 0 while (szam <= 100): szam = int(input("írj be egy 100-nál nagyobb számot! ")) print("köszönöm!") 14
Ismétlés while ciklussal while <feltétel>: A <feltétel> egy kifejezés, melynek értéke igaz (True) vagy hamis (False) lehet Itt is a behúzás jelzi a while-hoz tartozó, ismételendő utasításblokkot Ez az utasításblokk mindaddig újra és újra végrehajtódik amíg a <feltétel> igaz 15
Ismétlés while ciklussal while <feltétel>: igen <feltétel> igaz? nem 16
Gondoltam egy számra! Házi feladat Olyan programot kezdtünk el írni, mely kisorsol egy véletlen számot 1 és 100 között, majd arra kéri a felhasználót, hogy találja ki a sorsolt számot. A program úgy segíti a felhasználót, hogy annak minden tippje után kiírja, hogy a sorsolt szám nagyobb vagy kisebb, mint a felhasználó tippje. A program mindaddig kéri a felhasználó tippjeit, amíg a felhasználó ki nem találja a sorsolt számot. Egészítsd ki a hiányos programot! 17
Gondoltam egy számra! from random import randint szam = randint(1, 100) print("gondoltam egy számra 1 és 100 között.")... while (...): tipp =... if (...): print("nem, ennél kisebbre gondoltam.") else: if (...): print("nem, ennél nagyobbra gondoltam.") else: print("igen, eltaláltad!") 18
Gondoltam egy számra! from random import randint szam = randint(1, 100) print("gondoltam egy számra 1 és 100 között.") tipp = 0 while (szam!= tipp): tipp = int(input("melyik számra gondoltam? ")) if (tipp > szam): print("nem, ennél kisebbre gondoltam.") else: if (tipp < szam): print("nem, ennél nagyobbra gondoltam.") else: print("igen, eltaláltad!") 19
Lépésenkénti végrehajtás Próbáld ki! Indítsd el a Debugger-t a terminálablakban! (Debug Debugger) A kinyíló Debug Control ablakban lépésenként futtathatod a programot, miután a szokásos módon elindítottad (pl. F5 billentyűvel). A Step és az Over gombokkal léptetheted a programot utasításról utasításra. A Step minden függvénybe belép, az Over átlépi a függvényhívásokat. Figyeld meg a változók (szam és tipp) értékét a futás során! Ellenőrizd a feltételek teljesülését az if/else és while utasítások végrehajtásánál! 20
Ismétlő gyakorlatok Írj programot! Írj programot, mely kiírja a 7-tel osztható számokat 1-től 70-ig! Módosítsd a programot úgy, hogy azok mellé a számok mellé egy *-ot is kiírjon, amiben van 7-es számjegy! Írj programot! Írj programot, mely kiírja 2 hatványait 1-től 1000-ig! A számokat írjuk egy sorba, pontosvesszővel elválasztva! Azaz, ilyen kimenetet várunk: 1; 2; 4; 8;... 21
Ismétlő gyakorlatok n = 7 while (n <= 70): print(n) n = n + 7 n = 7 while (n <= 70): if ((n == 7) or (n == 70)): print(n, "*") else: print(n) n = n + 7 22
Ismétlő gyakorlatok sor = "" n = 1 while (n <= 1000): sor = sor + str(n) + "; " n = 2*n print(sor) n = 1 while (n <= 1000): print(n, end="; ") n = 2*n 23
Változók elnevezése a változók nevét a programozó választja egy változónév nem lehet foglalt Python kulcsszó, mint pl. if, else, while, def, and,... a változónevek betűket és számokat is tartalmazhatnak, de... nem kezdődhetnek számmal nem lehet bennük szóköz vagy olyan speciális karakter, mint #, &, $,... a változó nevek tartalmazhatnak _ (aláhúzás) karaktert 24
Változók elnevezése válasszunk rövid, de kifejező neveket! pl. egy háromszög magassága lehet magassag vagy néha egyszerűen csak m pl. egy bekért név és életkor lehet nev és kor ha mégis hosszabb nevet kell választani, akkor kövessünk egységes elnevezési mintát bármilyen mintát használhatnánk, de a Python programozók az alábbi mintát követik: haromszog_magassag, kor_sugar,... 25
Változók elnevezése Melyik helytelen? Az alábbi változónevek közül melyik helytelen? Melyik az, ami helyes, de kerülendő? És melyik az, ami nem python-os? oldal_a szam#1 elso_betu qwert tablaoszlop12 _spec teglalap_atlo 2.sor szoveghossz 3osztoi korsugar else gombmegsehatterszin $200 osszeg eger_pozicio_y sebesseg_x 26
Változók elnevezése oldal_a szam#1 elso_betu qwert tablaoszlop12 _spec teglalap_atlo 2.sor szoveghossz 3osztoi korsugar else gombmegsehatterszin $200 osszeg eger_pozicio_y sebesseg_x 27
Értékadás az értékadás az = jellel történik az első értékadással hozzuk létre a változót további értékadással változtathatjuk a változóban tárolt értéket az értékadás meghatározza a változó típusát is szam = 6 szam2 = 5*(szam+1) szam = 12 szam = szam + 1 szam += 1 n = 15 pi = 3.1415 msg = "Hello!" n = pi 28
Többszörös értékadás a Pythonban egyszerre több változóhoz is rendelhetünk értéket: a, b, c = 1, 2, 3 ennek segítségével kényelmesen cserélhetjük fel két változó értékét: x, y = 1, 2 x, y = y, x 29
Műveletek egész számokkal alapműveletek: +, -, *, / további hasznos műveletek: hatványozás: ** egész osztás: // maradékos osztás: % >>> 2**64 18446744073709551616 >>> 15/2 7.5 >>> 15//2 7 >>> 15%2 1 30
Műveletek tört számokkal alapműveletek: +, -, *, / próbáljuk ki ezeket is: hatványozás: ** egész osztás: // maradékos osztás: % >>> 2.5**10 9536.7431640625 >>> 15.5/2 7.75 >>> 15.5//2 7.0 >>> 15.5%2 1.5 31
Műveletek precedenciája sorrend 1. ** 2. *, /, //, % 3. +, - ha valami nem egyértelmű, használjunk zárójeleket! >>> 5+10/2 10.0 >>> 5*4**2 80 >>> 10/2*5 25.0 >>> 10/2+5*6**4-2 6483.0 >>> 10/2+5*6**(4-2) 185.0 32
Beépített függvények minimum és maximum min(), max() kerekítés round() >>> min(5, 10, 15) 5 >>> max(5, 10, 15) 15 >>> max(5.4, 6.25, 8.9) 8.9 >>> round(15.2) 15 >>> round(15.6) 16 33
Stringek egy szöveg karakterek sorozatából áll az ilyen karakterláncokat string-eknek nevezzük a stringet jelölhetjük a "..." vagy a '...' jelekkel msg = "Hello!" msg = 'Hello!' msg = "Ez egy 'A' betű." msg = 'Ez egy "idézet".' 34
String-kezelés szöveg hosszának megállapítása len() szöveg átalakítása kis- vagy nagybetűssé lower(), upper() keresés szövegben find() előfordulás számlálása count() >>> s = "Hello!" >>> len(s) 6 >>> s.upper() 'HELLO!' >>> s.lower() 'hello!' >>> s.find('o') 4 >>> s.find('b') -1 >>> s.count('l') 2 >>> s.count('b') 0 35
Típusátalakítás sokszor szükség van egy változóban tárolt érték típusának átalkítására str(): egész és tört számokból csinál string-et int() és float(): egészet és törtet csinál string-ből mi történik, ha a float() bemenete egy egész? mi történik, ha az int() bemenete egy tört? >>> str(12) '12' >>> str(15.6) '15.6' >>> int('12') 12 >>> float('15.6') 15.6 >>> float(12) 12.0 >>> int(15.6) 15 36
Egy mese tanulságai Egészítsd ki! Egészítsd ki az alábbi programot értelemszerűen! Ügyelj arra, hogy a volt szó minden előfordulását megszámolja a program, a kis- és nagybetűsöket egyaránt! szoveg = "Egyszer volt, hol nem volt, volt egyszer egy király. Volt ennek a királynak három fia." print("a szöveg hossza: " + ) print("a 'volt' szó ennyiszer fordul elő: " + ) print("a 'volt' szó első előfordulásának helye: " + ) print("a 'király' szó ennyiszer fordul elő: " + ) print("a 'király' szó első előfordulásának helye: " + ) 37
Egy mese tanulságai szoveg = "Egyszer volt, hol nem volt, volt egyszer egy király. Volt ennek a királynak három fia." szoveg = szoveg.lower() print("a szöveg hossza: " + str(len(szoveg))) print("a 'volt' szó ennyiszer fordul elő: " + str(szoveg.count('volt'))) print("a 'volt' szó első előfordulásának helye: " + str(szoveg.find('volt'))) print("a 'király' szó ennyiszer fordul elő: " + str(szoveg.count('király'))) print("a 'király' szó első előfordulásának helye: " + str(szoveg.find('király'))) 38
Logikai műveletek Boolean típusú (logikai) változók csak True (igaz) vagy False (hamis) értéket vehetnek fel ilyen változókkal logikai műveleteket végezhetünk: 1. not (negáció) 2. and (és) 3. or (vagy) >>> True and False False >>> True or False True >>> not True False 39
Logikai műveletek A B A and B F F F F T F T F F T T T A B A or B F F F F T T T F T T T T A F T not A T F 40
Feltételek kiértékelése Mit ír ki? Mit ír ki ez a program? X, Y, Z = 100, 25, 70 if ((X > Y) or (Y > Z)): print("alma") else: print("körte") if ((Z < X) and not(z > Y)): print("banán") else: print("narancs") 41
Összefoglalás változók elnevezése értékadás és többszörös értékadás műveletek egész és tört számokkal beépített függvények min(), max(), round() string-ek és string-kezelés len(), lower(), upper(), find(), count() típusátalakítás str(), int(), float() logikai műveletek and, or, not 42
Egy szám osztói Feladat Írj programot, mely bekér egy pozitív egész számot, majd kiszámolja és kiírja annak osztóit! Az osztók egy sorban, pontosvesszővel elválasztva jelenjenek meg! A program várt működése pl. a következő: Írj be egy pozitív egész számot: 15 15 osztói: 1; 3; 5; 15 43
Egy szám osztói Megoldási terv Kérd be a számot, és azonnal alakítsd át egész számmá! Hozz létre egy változót, amiben a kiírandó osztókat gyűjtöd majd! Mivel az 1 minden számnak osztója, ezért a változó kezdő értéke lehet 1. Ehhez fűzöd majd a további osztókat. Minden n számra 2-től a megadott szám feléig, vizsgáld meg, hogy n osztója-e a számnak! Ha igen, akkor n-et fűzd hozzá az osztókat tároló változó értékéhez! Végül fűzd hozzá az osztókhoz magát a számot, és írd ki az osztókat tároló változó értékét! 44
Egy szám osztói Ötletek n osztója egy X számnak, ha X-et n-nel elosztva 0 maradékot kapunk. Ezt így tesztelheted a programodban: if (X%n == 0): Meg kell vizsgálnod minden n számra 2-től a megadott szám feléig, hogy n osztója-e a számnak. Ezt egy while ciklussal lehet megoldani. A ciklus belsejében ne felejtsd el n aktuális értékének vizsgálata után n értékét megnövelni eggyel. Különben a programod végtelen ciklusba kerül, és soha nem áll le. 45
Tökéletes számok Feladat Egy pozitív egész számot tökéletesnek nevezünk, ha a szám megegyezik az önmagánál kisebb osztóinak összegével. Pl. a 6 tökéletes szám, mert az önmagánál kisebb osztói az 1, 2, 3, és ezek összege pont 6. Az előző feladat mintájára, írj programot, mely bekér egy pozitív egész számot, majd megállapítja, hogy az tökéletes szám-e vagy nem! A program várt működése pl. a következő: Írj be egy pozitív egész számot: 6 Tökéletes szám! Írj be egy pozitív egész számot: 12 Nem tökéletes szám. 47
Tökéletes számok Megoldási terv Kérd be a számot, és azonnal alakítsd át egész számmá! Hozz létre egy változót, amiben az osztók összegét tárolod majd! Mivel az 1 minden számnak osztója, ezért a változó kezdő értéke lehet 1. Ehhez adod majd hozzá a további osztókat. Minden n számra 2-től a megadott szám feléig, vizsgáld meg, hogy n osztója-e a számnak! Ha igen, akkor n-et add hozzá az osztók összegét tároló változó értékéhez! Végül ellenőrizd, hogy az osztók összege megegyezik-e a számmal, és az ellenőrzés eredményétől függően írd ki a megfelelő üzenetet a képernyőre! 48
Tökéletes számok keresése Feladat Az előző feladatban készített programmal megpróbálhatsz tökéletes számokat keresni, de hamar rájössz majd, hogy ez kézzel elég hosszadalmas. Írj programot, mely egy megadott felső határig az összes számot megvizsgálja, és kiírja a tökéletes számokat! A program várt működése pl. a következő: Tökéletes szám keresésének felső határa: 100 Ezeket a tökéletes számokat találtam: 6 28 50
Tökéletes számok keresése Megoldási ötlet Lényegében az előző programodat kell beletenni egy while ciklus belsejébe, mely az összes számon végigmegy 6-tól (tudjuk, hogy 6-nál nincs kisebb tökéletes szám) a bekért felső határig. 51
További anyagok on-line: https://www.python.org/ https://docs.python.org/3/ https://www.python.org/downloads/ http://python.hu/ http://python.hu/magyar-nyelvu-dokumentaciok http://python.hu/peldaprogramok http://harp.pythonanywhere.com/python_doc/tutorial/index.html 53
További anyagok könyvek Gérard Swinnen, Tanuljunk meg programozni Python nyelven, 2005 http://mek.oszk.hu/08400/08435/08435.pdf Koós Antal, Python a gépben, TypoTeX 2016 http://www.interkonyv.hu/konyvek/koos_antal_python_a_gepben 54
Készítette: Buttyán Levente Levente.Buttyan@gmail.com CoderDojo Szentendre 2017 55