While ciklus, elöl tesztelő ciklus
Elől tesztelő ciklus – While. A While ciklus megvizsgálja a belépési feltételt, ha igaz végrehajtja az utasításokat. A ciklusokat ismétlődő feladatok végrahajtására használjuk.
Írassuk ki a számokat 1-től 10-ig! Ez azt jelenti, hogy a feltételnek vagy <11-et adunk, vagy <=10-et. Az i változó értéke mindig 1-el fog növekedni, ahányszor lefut a ciklus. Amikor eléri a 11-et, akkor már ki fog lépni a ciklusból, és az else ág fut le. Az else ág opcionális. Természetesen nem mindegy, hogy a print előtt, vagy után növelhük az i értékét! Próbáld ki!
1 2 3 4 5 6 7 8 9 10 11 12 |
i = 1 while i < 11: print(i) i += 1 else: print("i nagyobb, mint 10") # így is 1-10-ig írja ki a számokat... nem árt figyelni a műveleti sorrendre! i = 0 while i < 10: i += 1 print(i) |
A coninue utasítást akkor használjuk, ha szeretnénk egy feltételt megvizsgálni, és utána folytatni a ciklust. Például ha i=5, írjuk ki, hogy hoppá! Itt az i értékét nem fogja kiírni, csak a hoppát!
1 2 3 4 5 6 7 |
i = 0 while i < 10: i += 1 if i == 5: print("hoppá") continue print(i) |
A break utasítást is használhatjuk feltétel vizsgálatra, de ez megszakítja a ciklus futását! Amikor elérünk péládul 5-ig, akkor ki fog lépni a ciklusból.
1 2 3 4 5 6 |
i = 0 while i < 10: i += 1 print(i) if (i == 5): break |
Példa: Írasd ki 1-100 közötti hárommal osztható számokat!
1 2 3 4 5 |
i = 1 while i < 100: i += 1 if i % 3 == 0: print(i) |
For cilus
A Pythonban kicsit eltérően működik a for ciklus, mint más programnyelveken. A Pythonban elsősorban összetett adattípusok (sor, lista, szótár, string, halmaz) elemein tudunk végighaladni a segítségével. Így kicsit előre kell vennünk ezeket a fogalmakat is.
Lista bejárása for ciklussal
A lista elemekből áll, ezeket az elemeket szoktuk kiolvasni, bővíteni, törölni… Majd későbbb még visszatérünk rá. Jelen példában csak szeretném kiíratni az összes elemét. A lista neve: napok. A lista elemeit szögletes zárójelek között felsoroljuk. Utána a for ciklus segítségével kiíratjuk: for x in napok Tehát amíg a nem ér a napok elemszámának végére, addig fut a print(x). Az x a lista elemet jelöli, ciklus változó, értéke eggyel nő minden lefutáskor. Számozása 0-tól kezdődik és elemszám-1-ig tart. Más porgramozási nyelveken ezt részletesen ki kell fejteni, lásd C#, JS… Itt sokkal egyszerűbb.
1 2 3 |
napok = ["hétfő", "kedd", "szerda","csütörtök","péntek"] for x in napok: print(x) |
String bejárása
Nagyon hasonló, egyszerű, mint a listánál. Ebben az esetben karakterenként tudunk végigmenni egy stringen. A stringekre is visszatérünk még.
1 2 |
for x in "hétköznap": print(x) |
A While ciklushoz hasonlóan a FOR ciklusnál is használhatunk break és continue argumentumot. A continue utasítással megállíthatjuk a for ciklus iterációjat, majd folytathatjuk tovább. A break utasítással pedig ki tudunk „ugrani” a ciklusból ott ahol éppen tart.
A for ciklusban is használhatunk else utasítást, ami akkor fut le, amikor végzett az iterációkkal. (break esetén nem fog kiírni semmit, mert megszakítottuk a ciklus futását.)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
napok = ["hétfő", "kedd", "szerda","csütörtök","péntek"] for x in napok: if x == "szerda": continue print(x) else: print("Minden elemen végigment!") #break esetében nem fut tovább: napok = ["hétfő", "kedd", "szerda","csütörtök","péntek"] for x in napok: if x == "szerda": break print(x) |
Range függvény. Ez hasonlít leginkább a C#-ra, itt megadhatjuk mettől-meddig menjen a for ciklus, és milyen lépésközökkel. A range(1, 51, 2) azt jelenti, hogy 1-től megy 50-ig, és kettesével nő a ciklusváltozó x értéke. Magyarul, csak a páratlan számokat fogja ebben az esetben kiírni. A range-nél a meddig értékéhez tulajdonképpen hozzá kell adni egyet.
1 2 |
for x in range(1, 51, 2): print(x) |
Természetesen itt is lehet egyszerűsíteni. Ha csak egy paramétert írok: for x in range(6) az azt jelenti, hogy alapból 0-tól kezdve számoz, így 0 – 5-ig növekszik egyesével a ciklusváltozó értéke. Ha két paramétert adok meg, akkor alapból egyesével növeli a ciklusváltozó értékét.
1 2 3 4 5 6 7 |
#Ebben az esetben az eredmény: 0 1 2 3 4 5 for x in range(6): print(x) #írassuk ki 10-20-ig a számokat! Eredmény: 10 11 ... 18 19 for x in range(10, 20): print(x) |
Nézzünk néhány egyszerű példát for ciklusra!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# --- Írasd ki 10x, hogy Éljen a Python! Sorszámot is! for i in range (10): print(i+1," Éljen a Pyhton!") # --- Írasd ki a 100 és 0 közötti számokat, tizesével csökkentve! print("\n for ciklussal 100-0-ig, tizesével csökkentve ") for n in range(100,0,-10): print(n, end=' ') # --- Mikor járt erre a Halley üstökös az utóbbi 2000 éveben? Tudjuk, hogy leutóbb 1986-ban, és 76 évenként tér vissza. for n in range(1986,0,-76): print(n, end=' ') # --- Írasd ki 10x az egyjegyű számokat! (1234567890), új sorba!") #ITT már figyelni kell! Maradékos osztással könnyen megoldható. Minden tizzel oszható számnál sortörés. for o in range(1,101): print(o%10, end=' ') if (o%10==0): print() # --- Szorzótábla, a hagyományos 10x10-es formában. A print utasítás alap esetben minden eredmény után sort törne, de a \t-vel tabulátort fog tenni helyette. Ha egy sorral kész, akkor viszont a 2. print utasítás végez sortörést. for i in range(1, 11): for j in range(1, 11): print(i*j,end="\t") print() # --- Szorzótábla. Ehhez már 2db for ciklus kell! Az i az oszlop,a j a sor for i in range(1, 11): for j in range(1, 11): print(str(i) + " * " + str(j) + " = " + str(i * j)) print("\n") # --- Évszám gyakorlása. Mikor adták ki at Aranybullát? Hasonlóan a gondoltam egy számra feladathoz... jó_válasz = 1222 próba = None tipp_db = 0 while próba != jó_válasz: tipp_db += 1 próba = int(input('Melyik évben adták ki az Aranybullát? ')) if próba < jó_válasz: print('A helyes évszám nagyobb...') elif próba > jó_válasz: print('A helyes évszám kisebb...') print('Igen, ez a jó válasz!') if tipp_db <= 3: print('Egészen ügyes vagy!') # --- Adott számú téglából hány darab tornyot tudunk építeni? Az első torony 2 téglából áll, a további tornyok mindig 3 téglával magasabbak. Az utolsó torony a maradék téglából áll. Hány tornyunk lesz? teglak_szama = int(input('Hány tégla van? ')) magasság = 2 tornyok_száma = 0 while teglak_szama > magasság: teglak_szama -= magasság tornyok_száma += 1 print('teszt: torony sorszáma: ', tornyok_száma, '\tmagassága:', magasság) magasság += 3 print('A megépíthető tornyok száma: ', tornyok_száma + 1) print('Az utolsó torony magassága: ', teglak_szama) # --- Armstrong szám Készíts programot, amely valamennyi 3 jegyű Armstrong számot kiírja, ciklusok egymásba ágyazásával! (Armstrong szám: számjegyei harmadik hatványainak összege egyenlő az adott számmal) for száz in range(1, 10): for tiz in range(10): for egy in range(10): szám = 100 * száz + 10 * tiz + egy # print(szám, end=" ") # Első feladatrész hatvány = száz * száz * száz + tiz * tiz * tiz + egy * egy * egy if szám == hatvány: print('Armstrong szám: ', szám, '\tEllenőrzés: ', szám, ' = ', száz * száz * száz, |
Gondoltam egy számot játék
Készíts Gondoltam egy számot játékot! A program 1-100 közötti számot sorsoljon, a játékosnak 5 db próbálkozási lehetősége legyen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
import random tipp = 0 db = 1 # próbálkozások száma gep = random.randint(1, 100) while db <= 5: print(f"{db}. tipp?") tipp = int(input()) if tipp == gep: print("Gratulálok! Eltaláltad") break elif tipp > gep: print("A gondolt szám kisebb!") else: print("A gondolt szám nagyobb!") db += 1 if db > 5: print("Vesztettél!") print(f"Gondolt szám {gep}") |
Kő, papír, olló játék – számokkal
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import random while True: gep=random.randint(0,2) jatekos = int(input("Kő(0), papír(1), olló(2)")) #kiíratáshoz átalakítás if jatekos==0: j="kő" elif jatekos ==1: j="papír" else: j="olló" if gep==0: g="kő" elif gep==1: g="Papír" else: g="olló" #eredmény kiértékelése print(f"Játékos: {j} Gép: {g}") if (gep==jatekos): print("Döntetlen") elif (gep==0 and jatekos ==1 )or(gep==1 and jatekos == 2)or(gep==2 and jatekos == 0): print("Játékos nyert!") else: print("Gép nyert") #while ciklusból kilépünk-e? folytatni = input("Játszunk még? (i/n) ") if folytatni.lower() != "i": print("Játék vége!") break |