Mindenki szereti a listákat

A mai alkalommal problémát vetek fel:

Mi van, ha például az a feladatod, hogy tárold a gépben az összes telefonszámot, amit felhívtál? Vagy az összes meccseredményt a kedvenc sportágad múlt hetéből? Vagy az összes könyved címét? Vagy az összes Féjszbuk-ismerősöd nevét? Vagy valami ilyesmit?

Azt tudjuk, hogy változókban szokás tárolni a dolgokat. Mondjuk írsz is rá programot:


print('Ez a program a kedvenc mesehőseid nevét tárolja el.')
#az előző sor hazugság, ez a program túl láma ahhoz
print('Addig kérdezget, amíg úgy nem nyomsz Enter-t, hogy nem írsz elé semmit.')

hős = None

while hős != '': #ez itt két aposztróf, köztük a nagy semmivel
    hős = input('Írj egy hősnevet!')

A negyedik sorban a hős változó értékét None-ra állítjuk, így egy üres változót hozunk létre. Ez azért kell, mert a while sorában le akarjuk kérdezni az értékét, és ha az nem üres karakterlánc (úgy adtuk meg, hogy a nyitó és a záró aposztróf közé nem írunk semmit), akkor megkérdi a hős nevét, és beteszi a hős változóba. Aztán? Aztán a következőt ugyanoda, és az első törlődik, majd a harmadikat ugyanoda és a második törlődik, végül nyomunk egy üres sorra Entert, amivel sikeresen kitöröljük az utolsó hőst is, de legalább a while feltétele nem teljesül, így a programunk elkussol. Egy hős nevét sem tároltuk. Hát, nem valami fényes megoldás. Nem, még annál is rosszabb.

De akkor hogy kell ezt csinálni???

Circle Question by blackspike from the Noun Project

Nos, a legkézenfekvőbb dolog, ha egy listába pakoljuk a hősneveket. És hogy mi az a lista? Megmutatom jól:


hősök = []

hős = None

while hős != '': #ez itt két aposztróf, köztük a nagy semmivel
    hős = input('Írd ide egy mesehős nevét! ')
    if hős: #ha van BÁRMI a hős nevű változóban (Bármi ~ True, Semmi ~ False)
        hősök.append(hős)

print(hősök)

A Python listája

A lista egy adatszerkezet, idegen szóval struktúra. Az adatszerkezetek arra valók, hogy több, egymással számunkra összefüggő adatot tároljunk bennük. A Python nyelvben a lista jele a szögletes zárójel.

A listáknak érdemes többes számú főnevet névül adni: lovak, játékosok, hónapok. A listának akár a létrehozása pillanatában is adhatunk értéket, de a későbbiekben is módunkban áll újabb elemeket fűzni hozzá az append() tagfüggvénnyel, más szóval metódussal. Az append() tagfüggvényben a zárójelbe írjuk bele azt, amit a lista végére fűzünk, és a tagfüggvényt ponttal kapcsoljuk a szóban forgó lista nevéhez.

A lista tartalmát a print(lista_neve) utasítással írhatjuk a konzolra. Így mondjuk eléggé csúnya, ám használható, és később majd tanulunk szebb módszert is.

A logikai hamis (False) érték bővebb értelmezése

Ha egy változó értéke None, vagy nincs benne semmi (például név = ” és ez itt nem egy idézőjel, hanem egy nyitó és egy záró aposztróf, közte a nagy semmivel), akkor a logikai értéke False, azaz hamis. Ha van benne bármi, akkor a logikai értéke True, azaz igaz. Nézd csak az alábbi programot, és próbáld meg kitalálni, hogy melyik sorok íródnak ki. Aztán ellenőrzésképp másold be IDLE-be és futtasd le!


if True:
    print('Igaz')

if False:
    print('Hamis')

if not True:
    print('Nem igaz - azaz hamis')

if not False:
    print('Nem hamis - azaz igaz')

doboz = None
if doboz: #a None logikai értéke: False
    print('1-Most van benne valami.')
if not doboz: #a nem False az True!
    print('1-Most üres.')

doboz = ''
if doboz: #a "semmi" logikai értéke: False
    print('2-Most van benne valami.')
if not doboz: #a nem False az True!
    print('2-Most üres.')

doboz = 'ezt tettem bele'
if doboz: #a "bármi" logikai értéke: True
    print('3-Most van benne valami.')
if not doboz: #a nem True az False!
    print('3-Most üres.')

Feladatok

F0013a: Kérd be a felhasználótól az öt kedvenc zenei előadója nevét és tárold az eredményt listában! (Megoldás itt.)

F0013b: Az előző programot módosítsd úgy, hogy a kedvenc számok címét is kérd be, és tárold őket egy másik listában! Az előadók nevét és a számok címét felváltva kérd be! (Megoldás itt.)

 

Legutóbb véletlenszámokkal, modulokkal és konstansokkal foglalkoztunk. Legközelebb bejárjuk a listáinkat.

 

(A kérdőjel: blackspike, noun project)

Advertisements

Mindenki szereti a listákat” bejegyzéshez ozzászólás

  1. Kedves raerek!

    Azt írod, hogy “ha egy változó értéke None, vagy nincs benne semmi (például név = ” és ez itt nem egy idézőjel, hanem egy nyitó és egy záró aposztróf, közte a nagy semmivel), akkor a logikai értéke False, azaz hamis.”

    Viszont a mintafeladatban a hős változó None értéket kap, utána meg ciklus feltétele az, hogy a hős változó ne “semmi” legyen. Tehát a None érték és a 2 aposztrof között a semmi érték mégsem ugyanaz, ugye, különben el sem indulna ciklusunk.

    Vagy valamit rosszul értek?

    köszönöm,

    ronaldinhogaucho

    Kedvelés

    • Jól érted, a None nem ugyanaz mint a ” (üres string), ezért indul el a ciklus.
      Viszont ha _logikai_ értékét nézzük, akkor mind a None, mind az üres string végső soron False értéket jelent. De ez csak logikai környezetben lesz így.

      Próbáld ki ezt:
      valami = None
      if valami:
      print(‘igaz’)
      if not valami:
      print(‘hamis’)

      valami = ”
      if valami:
      print(‘igaz’)
      if not valami:
      print(‘hamis’)

      valami = ‘bigyó’
      if valami:
      print(‘igaz’)
      if not valami:
      print(‘hamis’)

      Nyilván a behúzásokat tedd ki:)
      Ha nem vili, kérdezz.

      Kedvelés

      • Köszönöm, így már tökéletesen értem.

        Csak még egy kérdés: Notepad++-t használok, mert korábban még ezt ajánlották, mielőtt a te kurzusodra át nem tértem volna (kedvelem is, mert grafikusan sok mindent jelöl, pl. mettől meddig tart egy ciklus vagy a színekkel jelzi mondjuk, ha mást vár egy print parancs után a zárójelben). Szokjak át gyorsan IDLE-re vagy nincs jelentősége, hogy miben kódolok. (Azt látom, hogy mi lehet az IDLE előnye, hogy pl. kiírja buborékban, hogy milyen értékek adhatóak meg egy parancs után.)

        Kedvelés

      • Hmm, a WordPress nem enged válaszolni a kérdésedre, úgyhogy válaszolok a saját válaszomra:)
        Szóval az IDLE tanulni jó. Ha a Notepad++ neked megfelel, maradj annál, ahhoz képest valóban az egyetlen, bár nem elhanyagolható előnye az IDLE-nek a buboréksúgó:) Én egy darabig még ezt használom majd a videóimban, aztán tervezek áttérni komolyabb eszközre – pl PyCharm-ra. De egyelőre e a kicsi és buta jobb: nem tud fölöslegesen sokat.

        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