A bejárós ciklus és a bécsi klasszikusok

A múltkor láttunk listát, sőt, a feladatok között volt olyan is, ahol egyszerre kettővel nyomultunk. Ma megtanuljuk bejárni a listáinkat.

Na de mit jelent az, hogy bejárni? Hát azt, hogy végiglépkedünk a tagjain. És szerencsére a végiglépkedéshez van egy külön ciklusfajta, a bejárós ciklus, más szóval for-ciklus. Na, lássuk mindezt a gyakorlatban:

A bécsi klasszikusokat meg elvitte a cica:) – illetve írók lettek belőlük. Lényeg, hogy legalább a for-ciklus megvan:)


írók = []
művek = []

író = None

while író != '':
    író = input('Add meg egy író nevét! ')
    if író: #if író != ''
        írók.append(író)

for író in írók:
    mű = input('Add meg ' + író + ' egy művét! ')
    művek.append(mű)

print(írók, '\n', művek)

A bejárós ciklus

A bejárós ciklussal egy bejárható objektum – ilyen a lista is – elemeit tudjuk bejárni, végigjárni. A ciklus általában for valami in valamik alakú sorral kezdődik. A valamik a bejárható objektum, amiben több dolog van, ezért is kértelek rá, hogy ha jót akarsz magadnak, legyen többesszámú főnév a neve. A valami az a valamik épp aktuális eleme, és egyébiránt bejárónak, más nyelvekből átszivárgó szóhasználattal ciklusváltozónak nevezzük. Esetünkben for író in írók.

A ciklus belsejében az a bizonyos valami (most épp ugye “író”) az, amivel dolgozunk – mi most tulajdonképp csak kiírjuk.

A bejáró (ciklusváltozó) angol neve: iterator, a bejárható objektumé (ami nem csak lista lehet, de nekünk sokáig nem nagyon lesz más) pedig iterable. Az iteráció szó pedig a bejárát, végigjárást jelenti.

Figyelj, a for-ciklus csak a Pythonban “bejárós” ciklus, a legtöbb programozási nyelvben mást csinál és más a neve: “számlálós ciklus” néven fut. A Pythonnak nincs ilyen ciklusa, de tudjuk szimulálni. Majd alkalomadtán megtanuljuk, hogy miként, de ezzel nem most terhellek.

Feladatok

Kérlek, hogy a mai feladatokat lehetőleg puskázás nélkül, teljesen a nulláról indulva írd meg. A fenti példához, illetve a múlt alkalommal kapott feladatokhoz képest semmi új nincs bennük, de szeretném, ha begyakorolnád a ciklusokat. A feladatok nem életszagúak, de majd ügyesedünk.

F0014a: A program elején megadunk egy listát: lovak = [‘Ráró’, ‘Baró’, ‘Tipró’, ‘Karó’]. Kérd be egy színek nevű listába, hogy melyik ló milyen színű!

F0014b: Kérd be állatok nevét egy listába, amíg üres bemenet nem jön, majd ha ezzel megvagy, kérd be egy-egy kajájukat is egy másik listába! A kaják bekérésekor tudasd a felhasználóval, hogy melyik állat kajáját kéred éppen!

F0014c: Kérj be 10 szót, majd írj belőlük “mondatokat”: az egyes szavakat írd szóközzel egymás után elválasztva tízszer, a végén ponttal (az első szó kezdődhet kisbetűvel)! Tehát ha pl a tíz megadott szóból a harmadik az, hogy ló, akkor a harmadik mondat az, hogy ‘ló ló ló ló ló ló ló ló ló ló.’

F0014d: Kérj be 10 szót, majd írj belőlük 5 mondatot! Az öt mondat teljesen egyforma, a tíz szó felsorolása, szóközzel elválasztva, a végén ponttal (az első szó kezdődhet kisbetűvel).

 

A múltkor megismerkedtünk a lista adattípussal. Legközelebb a range objektumtípus jön.

 

Reklámok

A bejárós ciklus és a bécsi klasszikusok” bejegyzéshez ozzászólás

  1. Kedves Pythonidomár!

    Nagyszerű az oldal! Köszönet érte! Lenne itt egy kis problémám. A 14c feladatban a mondatok kiiratását úgy oldottam meg, hogy:
    while szám <=10:
    szó = input('Kérem a ' + str(szám)+ '. szót: ')
    szavak.append(szó+' ')
    szám +=1

    for szó in szavak:
    print(10*szó,'.')

    Tehát append-eltem a listába minden szó után egy szóközt is. Csakhogy így a mondatvégi pont is szóköz után lesz. Érzem, hogy sántít a megoldásom, de nem jut eszembe semmi más. Segíts légyszi! 🙂

    Kedvelés

    • Szervusz!

      Elég ennyi, hogy:
      szavak.append(szó)

      és a szóközöket elég a kiíráskor elhelyezni, pl:
      for szó in szavak:
      for i in range(10):
      print(‘szó’ + ‘ ‘)
      (persze a szorzásos megoldás is remek)

      Sok örömet:)

      Kedvelés

      • Háááát igen! 😀 De ez így csalás! A range függvénnyel még csak a következő témában kell találkoznom. 🙂

        Kedvelés

      • Nem tudok a tiedre válaszolni, nem tudom miért. Szóval hmmm, ezt bebuktam :Đ
        de akkor persze meg tudod írni while-lal:)

        Kedvelés

      • Szep napot!
        Kicsit megkesve bar, csak most talatam meg a lapod. Gratulalok hozza, nagyon hasznos!
        A feladatban leirt kiirashoz nem ez a(z egyik) legegyszerubb megoldas?

        for szo in szavak:
        print(szo + 9 * (” ” + szo) + “.”)

        Bocs az ekezetert, nem talalok magyar betuket a klaviaturan. 🙂

        Kedvelés

  2. Nekiugrok while-lal. Csak próbáltam a legegyszerűbb megoldásban gondolkodni. De gyakorlásnak szuper lesz. Big Respect a munkádért, és jó hétvégét!

    Kedvelés

    • Légy ügyes, és neked is:)

      Ja, még egy perverz megoldás:

      for szó in szavak:
      for akármi in szavak:
      print(szó + ‘ ‘)

      Azt használjuk ki, hogy a szavak lista pont tíz tagú, és a beslő ciklusban számlálóként futtatjuk végig:) Persze ezzel nem tdudnk tökéletes megoldás adni, mert nem vesszük észre, hogy már vége lesz a listűnak és szóköz helyett pontot kell írni.

      Kedvelés

  3. Valamiért nem küldte el, megpróbálom újra…
    Szóval az első házi feladatban valószínű, valamit rosszul csinálok, de nem tudok rájönni, micsodát. Tudna valaki segíteni?

    lovak =[‘Ráró’,’Baró’,’Tipró’, ‘Karó’]
    színek=[]
    szín= None
    for szín in lovak:
    ló=input(‘Milyen a színe’ + lovak +’ nak? ‘ )
    színek.append(ló)

    azt a hibaüzenetet kapom, TypeError: Can’t convert ‘list’ object to str implicitly.
    Köszi előre is!:)

    Kedvelés

    • Nem akarok pontos megoldást adni, mert gondolkodj csak.:) De próbállak rávezetni.

      A harmadik sorod nem kell. A negyediket írd át így:
      for ló in lovak:
      És ennek fényében javítsd az input utáni kérdést.
      Természetesen nem lesz jó így az input előtti változónév, mert azt elhasználjuk ciklusváltozónak.

      A hibaüzeneted szó szerint azt jelenti: nem tudok listát karakterlánccá alakítani, ha csak nem kéred kifejezetten.

      Ha keveset segítettem, kérdezz újra!

      Kedvelés

      • Teljesen jó, rájöttem, köszi! 🙂 Ezzel a forral még megbarátkozok, ott voltam hülye, hogy az egész listát akartam bekérni holott a for utáni cucc léptet egyesével. 🙂
        Még egyszer köszi, szupi az oldal!

        Kedvelés

  4. Hali!
    nekem ha a print a for cikluson belül van egészen fura eredményt hoz…….mutatom:
    program:
    szavak = []
    mondatok = []

    szo = None
    i = 0

    while i <= 10:
    szo = input('Adj meg egy szót! ')
    szavak.append(szo)
    i += 1
    for szo in szavak:
    szo = (szo + ' ')
    mondat = (10*szo + '.')
    mondatok.append(mondat)
    print(mondatok)

    eredmény:

    " ['szó szó szó szó szó szó szó szó szó szó .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .', 'mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .', 'mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok .', 'katya katya katya katya katya katya katya katya katya katya .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .', 'mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok .', 'katya katya katya katya katya katya katya katya katya katya .', 'kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .', 'mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok .', 'katya katya katya katya katya katya katya katya katya katya .', 'kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák .', 'macska macska macska macska macska macska macska macska macska macska .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .', 'mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok .', 'katya katya katya katya katya katya katya katya katya katya .', 'kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák .', 'macska macska macska macska macska macska macska macska macska macska .', 'macskák macskák macskák macskák macskák macskák macskák macskák macskák macskák .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .', 'mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok .', 'katya katya katya katya katya katya katya katya katya katya .', 'kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák .', 'macska macska macska macska macska macska macska macska macska macska .', 'macskák macskák macskák macskák macskák macskák macskák macskák macskák macskák .', 'valami valami valami valami valami valami valami valami valami valami .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .', 'mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok .', 'katya katya katya katya katya katya katya katya katya katya .', 'kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák .', 'macska macska macska macska macska macska macska macska macska macska .', 'macskák macskák macskák macskák macskák macskák macskák macskák macskák macskák .', 'valami valami valami valami valami valami valami valami valami valami .', 'valami valami valami valami valami valami valami valami valami valami .']
    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .', 'mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok .', 'katya katya katya katya katya katya katya katya katya katya .', 'kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák .', 'macska macska macska macska macska macska macska macska macska macska .', 'macskák macskák macskák macskák macskák macskák macskák macskák macskák macskák .', 'valami valami valami valami valami valami valami valami valami valami .', 'valami valami valami valami valami valami valami valami valami valami .', 'növény növény növény növény növény növény növény növény növény növény .'] "

    program:

    szavak = []
    mondatok = []

    szo = None
    i = 0

    while i <= 10:
    szo = input('Adj meg egy szót! ')
    szavak.append(szo)
    i += 1
    for szo in szavak:
    szo = (szo + ' ')
    mondat = (10*szo + '.')
    mondatok.append(mondat)
    print(mondatok)

    ha tehát a for cikluson kívül van a print, akkor az eredmény:

    ['szó szó szó szó szó szó szó szó szó szó .', 'szavak szavak szavak szavak szavak szavak szavak szavak szavak szavak .', 'mondat mondat mondat mondat mondat mondat mondat mondat mondat mondat .', 'mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok mondatok .', 'kutya kutya kutya kutya kutya kutya kutya kutya kutya kutya .', 'kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák kutyák .', 'macska macska macska macska macska macska macska macska macska macska .', 'macskák macskák macskák macskák macskák macskák macskák macskák macskák macskák .', 'növény növény növény növény növény növény növény növény növény növény .', 'növények növények növények növények növények növények növények növények növények növények .', 'valami valami valami valami valami valami valami valami valami valami .']

    (Bocsi, hogy tele spammeltem a kommenteket, de máshogy nem tudtam megmutatni. már az elején a bemutató videónál gyanús volt nekem, hogy nem egymás alá írja a szavakat…(itt "mondatokat")

    Valaki ötlet?

    Kedvelés

    • Ötlet biztos lesz, de mi a kérdés? 😉 Az első alkalommal minden új mondatnál kiírja az összes eddigit meg az újat, a másodiknál meg nem ír semmit, csak a végén a mondatokat egyszer.

      Kedvelés

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s