Python: ciklusok

Programozás Python

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!

A continue 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!

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.

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!

i = 1
while i < 100:
    i += 1
    if i % 3 == 0:
        print(i)

Gyakorlás:

Írj egy programot, amely [1;12] intervallumon állít elő 20 darab véletlenszámot! A képernyőre kizárólag csak a 3-mal oszthatóakat írja ki, és a végén informálja a felhasználót arról is, hány darab ilyen szám volt.

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 nem ér a napok elemszámának végére, addig fut a print(x). Az ‘i’ 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.

Több lista párhuzamos bejárása zip() függvény segítségével

String bejárása for ciklussal

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.

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.)

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.

A range(start, stop, step) legfőbb ereje abban rejlik, hogy egész számok egy sorozatát állítja elő, anélkül, hogy ténylegesen létrehozná és memóriában tárolná az összes számot (ezért tekintjük generátornak/iterátornak), ami nagy adathalmazok esetén rendkívül erőforrás-hatékony. Mivel a range objektum tudja tárolás nélkül is, hogy mely számokat tartalmazza, rendkívül gyorsan lehet ellenőrizni vele, hogy egy adott szám beletartozik-e a megadott intervallumba.

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.

A Python List comprehension (listagenerátor) egy tömör és hatékony módszer a listák létrehozására vagy meglévő listák átalakítására.

Most akkor FOR vagy WHILE?

A for ciklust akkor érdemes használni, ha előre tudod a ciklus futásainak számát, vagy ha egy ismert adathalmaz (egy ún. iterable – pl. lista, string, tuple, range objektum) összes elemén végig akarsz menni, sorban, az elsőtől az utolsóig.

A while ciklust akkor érdemes használni, ha nem tudod előre a ciklus futásainak pontos számát, de van egy feltétel, aminek teljesülnie kell a ciklus futásához. A ciklus addig fut, amíg ez a feltétel igaz (True). Végtelen ciklus akkor fordul elő, ha a while ciklus feltétele soha nem válik hamissá (False). Ez a program lefagyásához vagy erőforrás pazarláshoz vezet.

Nézzünk néhány egyszerű példát for ciklusra!

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.

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

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

Frissítve: 2025.11.09.