Kiválasztás

Az előző alkalommal az eldöntés tételében azt vizsgáltuk, hogy van-e adott tulajdonságú elem a bejárható objektumunkban. Most abból indulunk ki, hogy van ilyen tulajdonságú elem, de melyik az? Erre a kérdésre válaszol a kiválasztás tétele, amelyik lényegében megegyezik az eldöntés tételével, a közepe más.

A programozás tétel általánosan, pszeudokóddal:

sorozat = valamilyen lista, range, vagy más bejárható objektum
 
ciklus sorozat minden elem-ére
    ha az elem keresett tulajdonságú:
        kiírjuk az elemet, az indexét, vagy egy változóba tesszük az indexét
        break
    elágazás vége
ciklus vége

Elemek szerint bejárva az objektumunkat:


for elem in bejárható_objektum:
    if elem olyan_amilyet_keresünk:
        print(elem)
        break

Indexek szerint bejárva az objektumunkat (szerintem ez fog gyakrabban kelleni):


for index in range(len(bejárható_objektum)):
    if bejárható_objektum[index] olyan_amilyet_keresünk:
        print('Az elem helye:', index, 'maga az elem:', bejárható_objektum[index])
        break

A Python egyszerűsítése:

  • Ha konkrétan az elem indexére vagyunk kíváncsiak, akkor használhatjuk a lista objektumtípus index() tagfüggvényét. Azaz ha például van egy autók listánk, és arra vagyunk kíváncsiak, hogy hányadik elem a Trabant, akkor kiadható az autók.index(‘Trabant’) utasítás. Ez az egyszerűsítés nem működik olyan esetekben, amikor magát az elemet tulajdonság alapján akarjuk megtalálni: például ha T-vel kezdődő autónévre vagyunk kíváncsiak.

Feladatok:

F0023a: Vágd be a kiválasztás tételét!

F0023b: Adott egy lista: [1, 54, 35, 67, 12]. Melyik az első páros szám? Hányadik az első héttel osztható szám? Melyik az első 60 és 70 közé eső szám? Hányadik szám a 12? Mi a 12 indexe? (Megoldás itt.)

F0023c: Adott a decemberi névnapok listája: ['Elza', 'Melinda', 'Ferenc', 'Barbara', 'Vilma', 'Miklós', 'Ambrus', 'Mária', 'Natália', 'Judit', 'Árpád', 'Gabriella', 'Luca', 'Szilárda', 'Valér', 'Aletta', 'Lázár', 'Auguszta', 'Viola', 'Teofil', 'Tamás', 'Zénó', 'Viktória', 'Ádám', 'Eugénia', 'István', 'János', 'Kamilla', 'Tamara', 'Dávid', 'Szilveszter']. Határozd meg, hogy hányadikán van Teofil napja! (Feltételezheted, hogy minden nap egyetlen névnap van.) (Megoldás itt.)

F0023d: Add meg 68 és 54 legnagyobb közős osztóját! (Megoldás itt.)

F0023e: Add meg 14 és 18 legkisebb közös többszörösét! (Megoldás itt.)

F0023f: Adott a 450, 782, 1344, 1783, 1889, 2520, 2343, 1381, 1213 sorozat, amely azt jelképezi, hogy milyen magasan vannak a hegyvidéken áthaladó busz egyes megállói. Hányadik megálló van a hegycsúcson? Feltételezheted, hogy amikor elindul lefelé a busz, már nem lesz emelkedő, illetve, hogy nem csúcsról indul és nem oda érkezik a busz. (Megoldás itt.)

F0023g: Add meg az első olyan hatjegyű számot, aminek az ötödik számjegye 8! (Megoldás itt.)

F0023h: Egy szülő Mikulás után a lehető leghamarabb szeretné a leendő gyermeke névnapját ünnepelni, és mindenképp alliteráló nevet szeretne a gyerekének. Kérdezd meg a vezetéknevét, majd mondd meg neki, hogy melyik az első alkalmas név a gyermekének, és azt, hogy hányadikán ünnepelheti a névnapot! Ha nem találsz neki alkalmas névnapot, akkor közöld vele a szomorú hírt! (Igen, itt kell az eldöntés tétele is, és ez már átvezet a következő témánkhoz.) Használd a fenti névnaplistát! (Megoldás itt.)

Legutóbb az eldöntés tételével foglalkoztunk. Legközelebb a lineáris keresés tételével ismerkedünk meg.

Advertisements

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