Megszámolás

Az előző három tétel arról szólt, hogy a listánkat átnyálaztuk adott tulajdonságú elem után kutatva. Ha találtunk ilyen elemet, akkor csináltunk vele valamit (kiírtuk, változóba töltöttük az értékét, változóba töltöttük az indexét), majd angolosan távoztunk. A távozásnak alapvetően két módja volt:

  1. break-kel kiugrottunk a for-ciklusból, és azt is elfelejtettük, hogy valaha járunk ott (többnyire ezt használtuk)
  2. while-ciklus esetén meg a ciklus elején lévő feltétellel gondoskodunk róla, hogy többé ne menjünk vissza a ciklusba

Hát ennek vége! Elég a sunyiságból!! Mostantól végigcsináljuk, amit elkezdtünk!!! Ennek a mondatnak a végén már négy felkiáltójel lesz!!!!

A megszámolás a kemények tétele! Ez innen is látszik:

A megszámolás tétele

alapvetően arról szól, hogy

  • definiálunk egy számlálót: egy változót, amiben számon tartjuk, hogy eddig hány, a keresett tulajdonsággal bíró elemet találtunk; a számláló kezdeti értéke nulla
  • végigjárjuk a bejárható objektum összes értékét, és ha egy elem adott tulajdonságú, akkor növeljük a számlálót

Lássuk ezt videón:

Mondatszerű leírással:


sorozat = valamilyen lista, range, vagy más bejárható objektum

számláló = 0

ciklus sorozat minden elem-ére
    ha az elem keresett tulajdonságú:
        növeljük a számlálót
    elágazás vége
ciklus vége

Pythonban, értékek szerint bejárva a bejárható objektumunkat (többnyire ezt használjuk):


számláló = 0

for elem in bejárható_objektum:
    if elem olyan_amilyet_keresünk:
        számláló += 1

Pythonban, indexek szerint bejárva a bejárható objektumunkat (ez kell, ha a szomszédos elemekhez akarjuk hasonlítgatni az adott elemet):


számláló = 0

for index in range(len(bejárható_objektum)):
    if bejárható_objektum[index] olyan_amilyet_keresünk:
        számláló += 1

A Python egyszerűsítése

  • Már ismered, de a teljesség kedvéért ideírom: működik az ['alma', 'körte', 'alma', 'alma'].count('alma'), más formában a listanév.count(keresett_elem) utasítás, azaz a lista objektumtípus count() tagfüggvénye. Szokás szerint nem használható a bonyolultabb esetekben.

Feladatok

F0025a: Vágd be a megszámolás tételét!

F0025b: Dobj fel egy kockát 100000-szer, a dobásokat tárold listában! Hány hatosod van? (Megoldás itt.)

F0025c: Hány 10-nél nagyobb szám van a 3, 6, 12, 3, 14, 5, 18 listában? (Megoldás itt.)

F0025d: Hozz létre egy 100 elemű listát 0 és 100 közötti számokból! Mennyi belőle összesen a 30-nál kisebb  és a 60-nál nagyobb szám? (Megoldás itt.)

F0025e: Mennyi a következő listában összesen a piros meg a kék? [‘piros’, ‘zöld’, ‘kék’, ‘kék’, ‘piros’, ‘zöld’, ‘sárga’, ‘kék’, ‘piros’] (Megoldás itt.)

F0025f: Dobj fel egy kockát 100000-szer, a dobásokat tárold listában! Hányszor sikerült kidobnod az egyes számokat? (Megoldás itt.)

F0025g: Dobj fel egy kockát 100000-szer, a dobásokat tárold listában! Hányszor sikerült kidobnod az egyes számokat? Az eredményeket tárold listában! (Megoldás itt.)

F0025h: Hozz létre egy 100 elemű listát 0 és 100 közötti számokból! Hány olyan páros szám van benne, ami után is páros szám áll? (Megoldás itt.)

F0025i: A ‘fele’, ‘fölfele’, ‘ferde’, ‘felette’, ‘zabkeksz’ szólistában (érted, szólista, aki egyedül játszik egy hangszeren) hány olyan szó van ami f-fel kezdődik és e-re végződik? (Megoldás itt.)

Legutóbb lineárisan kerestünk. Legközelebb megtudjuk, hogy mennyi a legtöbb.

Reklámok

Megszámolás” bejegyzéshez ozzászólás

  1. A F0025d-hez (csak egy ciklus van):
    import random
    szamok = []
    szamlalo = 0

    for _ in range(100):
    szamok.append(random.randint(0,100))
    if (szamok[-1]) 60:
    szamlalo += 1
    print(szamlalo,’db 30-nal kisebb vagy 60-nal nagyobb szam van a listan’)

    A F0025e-hez:
    szinek = [‘piros’, ‘zöld’, ‘kék’, ‘kék’, ‘piros’, ‘zöld’, ‘sárga’, ‘kék’, ‘piros’]
    print(‘Piros és kék színek összesen:’,szinek.count(‘piros’)+szinek.count(‘kék’))

    Kedvelés

  2. Hogyan tudnám azt csinálni, hogy pl egy while cikluson belül listákat szeretnék létrehozni minden lépésben, hogy abban tároljam a belső ciklus termékeit, és ezek egyediek legyenek, utalva arra, hogy hányadik lépésben lettek létrehozva.
    Pl:
    while ….1-1000
    while (ez csinál valamit, aminek az eredményeit szeretném eltárolni egy listában)
    list1
    . …
    list2 egészen list1000-ig.

    Kedvelés

    • Hát, ha jól értelek, akkor neked a 29. leckében lévő cuccra van szükséged. Ha a külső ciklusod aktuális értéke k, a belsőé b, akkor tudsz olyan listák listáját csinálni, hogy [[k1, b1], [k2, b2], [k3, b3]].

      Kedvelés

      • Nem. Én erre gondoltam:
        A külső ciklusban fut pl “y” 1-1000-ig, és minden lépésben létre szeretnék hozni egy listát, amiben eltárolom a belső ciklus adatait, (ahol pl “x” felvesz 200 értéket, vagyis fut 1-200-ig), ÉS ennek a listának a nevében legyen benne az, hogy az “y” ekkor vette fel az egyes értéket (pl y1).

        Kb:
        y=1
        while y < 1000:
        # itt lenne a legjobb létrehozni a listát, aminek a nevében benne van az, hogy mennyi az "y".
        x=1
        while x<200:
        import random
        z = random.randint (0,121)
        # kellene ide a lista, aminek a neve arra utal, hogy ez az első sorozat
        pl LISTAIPSZILON1.append (z)
        x += 1
        y+=1
        (és amikor ideugrik, akkor újra legyen egy listám, ami már pl ipszilon2, tehát a lista nevébe szeretném beletenni a sorszámot)

        # (tehát azt szeretném, hogy a végén legyen 1000 listám, amik elemeit aztán tovább tudom használni).

        Kedvelés

      • Azért ide válaszolok, mert a wordpress béna, és nem lehet már a tiedre:( Szóval amit te szeretnél, az nem oké, mert nem okos dolog változónevet generálni on-the-fly. Nehéz is, meg hogyan tartod számon, hogy az y1 után jön az y2….

        Viszont, itt van, amit mondtam (29. lecke) alapján a programod: (kipróbáltam, ha a behúzásokat a helyükre teszed, fut)

        #!/usr/bin/env python3
        import random

        listáklistája = []
        y=1
        while y < 1000:
        # itt lenne a legjobb létrehozni a listát, aminek a nevében benne van az, hogy mennyi az "y".
        x=1
        lista = []
        while x<200:
        z = random.randint (0,121)
        lista.append(z)
        x += 1
        listáklistája.append(lista)
        y+=1

        print(listáklistája)

        print(listáklistája[0]) #az első 200 elem
        print(listáklistája[10]) #a 11. 200 elem
        print(listáklistája[10][0]) #a 11. 200 elem első eleme

        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 )

Google+ kép

Hozzászólhat a Google+ 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 )

Kapcsolódás: %s