Meseautómárkák

A múltkor már megismerkedtünk a listákkal futólag, de alapvetően csak azért, hogy jobban megértsük bejárós ciklust, és a számlálós ciklusok kapcsán a listákhoz nagyon hasonló range-objektumok, azaz sorozatok természetét. Azonban a listák ennél lényegesen fontosabbak, így most visszatérünk hozzájuk.

Mit is tudunk eddig a listákról?

  • létrehozásuk vagy úgy megy, hogy a lista nevét követően szögletes zárójelet nyitunk és zárunk:
    az_én_listám = []
  • vagy úgy, hogy kezdeti értékekkel is feltöltjük a listát:
    az_én_listám = ['aladár', 'bétamás', 'gammatyi']
  • tehetünk bele számokat is:
    az_én_listám = [55, 13, 1841, -567]
  • sőt, akár vegyesen is lehetnek benne a különböző típusú – eddig az int, str és bool típust tanultuk – adatok:
    az_én_listám = [55, 'bétamás', False]
  • új értéket a lista végére biggyeszteni az append() tagfüggvénnyel lehet:
    az_én_listám.append('Ez egy új str típusú érték, de lehetne más típusú is ám.')
  • és azt is tudjuk, hogy a for-ciklussal bejárhatók.

Igen okosak vagyunk, nemdebár? És még csak most jön a Java. Ja nem, nem lesz Java, Pythonnal foglalkozunk.


autóim = ['Dacia', 'Jeep', 'Opel', 'Lotus', 'Volvo', \
          'Fiat', 'Aston Martin', 'Mazda', 'Saab', 'Toyota', 'Audi']

új_autóim = []
új_autó = None

while új_autó != '':
    új_autó = input('Milyen autót vettél ma? ')
    if új_autó != '':
        új_autóim.append(új_autó)

print('Új autóim:', új_autóim)

autóim.extend(új_autóim)
print('Midenféle autóim:', autóim)

eladnivaló_autó = input('Mit adjunk el? ')
autóim.remove(eladnivaló_autó)
print('Autóim eladás után:', autóim)
print(eladnivaló_autó, '-ból maradt még:', autóim.count(eladnivaló_autó))

A programban két listát kezelünk. A while-ciklusban (10. sor) az append() tagfüggvényt használjuk arra, hogy az újonnan vásárolt autókat az új_autóim lista végére biggyesszük. Az extend() tagfüggvény (14. sor) egy lista másik listával való bővítésére szolgál: bővítésre_váró_lista.extend(lista_amivel_bővítünk). A remove() tagfüggvény (18. sor) kiveszi a listából azt, amit a zárójelben megadunk, pontosabban annak az értéknek az első előfordulását. Ha nem talál ilyen értéket, akkor hibát jelez. A count() tagfüggvény (20. sor) megszámolja, hogy a listában hányszor fordul elő az, ami a zárójelben van. Szakszerűbben úgy mondjuk, hogy megszámolja, hogy a listában hányszor fordul elő a tagfüggvénynek paraméterként átadott listaelem.

Feladatok:

F0017a: Írd meg azt a programot, amely külön-külön listába bekéri az európai királyságok (Belgium, Dánia, Hollandia, Nagy-Britannia, Norvégia, Spanyolország, Svédország), nagyhercegségek (Liechtenstein, Luxemburg), és hercegségek (Andorra, Monaco), neveit. A listák bővülése legyen nyomon követhető: minden újabb listatag megadása előtt legyen látható, hogy eddig ki van a listában. A program ezt követően a három listát egy negyedik, monarchiák nevű listához adja. Végül hozzáadja Vatikánt, és kiírja az egyesített listát. (Megoldást nem adok, a fenti videó alapján mennie kell.)

F0017b: Írj olyan programot, amely listába gyűjti 10 000 000 kockadobás (1-6 közötti véletlenszám) eredményét, majd kiírja, hogy az egyes számokat hányszor dobta a gép! Ha a Python véletlenszám-generátora jól működik, akkor úgy ezres pontosságig saccold meg fejben, hogy az egyes számokat hányszor fogja dobni a program. A programodban van egy import, egy listadefinícíós sor, és maga a program nem más, mint két for-ciklus, összesen négy sorban. Először írd meg a pszeudokódos verziót! Ha kész, vagy ha elakadsz, az expand source-ra kattintva olvashatod. Végül írd meg a programot! (Megoldás itt.)


dobások listát létrehoz

ciklus 1-től 10 000 000-ig
    dobások-ba: véletlenszám
ciklus vége

ciklus szám = 1-től 6-ig
    ki: szám, dobások-ban megszámol számot
ciklus vége

 

Előzőleg rendet raktunk a ciklusok népes táborában. Legközelebb megtudjuk, mit jelent az, hogy index, ha listáról beszélünk.

Meseautómárkák” bejegyzéshez 15ozzászólás

  1. Szia Ráérek!
    Van egy kis gondom…
    Nem értem (szinte)az egész feladatot…………. :/ (F0017b)
    A fő feladatot értem(vastagbetűs), de az alatta lévőt kompletten nem, már korábban is előfordult, hogy egy-két vesszőt nem jól értelmeztem, vagy a hangsúlyt nem a kigondolt helyére tettem, és egy tök más programot írtam(nem csak toporzékolok, 40percet gondolkoztam rajta).
    Azt hiszem tudok még pontosítani, írom a gondolataim: ezres pontosságig saccoljam meg az egyes számokat….melyikeket? ahogy leírtad összetételszerűen a programot, abból arra következtetek hogy az (felhasználói)inputban lévőket. és akkor mi lesz majd a listadefiníciós sor, mihez kéne lista? tároljam listában az inputokat? nem, biztos nem, mert akkor mondtad volna, hogy hány input legyen a listában….és a program akkor most áll egy inputból(remélem nem írta Raerek veletlenül az inputot az IMPORT helyett mert akkor ismét egy végtelen ciklusba fut az agyam és arra jutok mint egy korábbi feladatnál ahol 4órát gondolkoztam rajta, megfájdult a feszült koncetrációtól az agyam és a fejem és abba kellett hagynom az egészet. /másnap 30p alatt csináltam meg egy új gondolatmenettel/) visszatérve tehát egy inputból , egy listadefinícióból, és két for ciklusból. és ez összesen négy sor. vagy csak a két for ciklus négy sor? fuhh…. ismét tekeredek bele a dolgokba….
    Szóval tudnál segíteni nekem azzal, hogy megfogalmazod a feladat nem vastagbetűs részét valahogy másképpen?

    Ha már csak elolvastad azt is nagyon köszönöm… 😀

    Kedvelés

    • Kedves Noske Richárd! Megkövetlek, és mea maxima culpa. De igen, azaz input az import. Gondoltam, majd azzal terelek, hogy késő volt már, de 14:00 lehetett, amikor a feladatot írtam – a videóból kiindulva. Az az igazság, hogy szégyellem magam. Rajtad már nem segít, de megyek és rendbehozom a feladatot:(. Ne haragudj.

      Kedvelés

    • És még egy: ha bárhol nehézsége okoz a feladat értelmezése, én leszek a leghálásabb, ha szólsz miatta. Ezek sajnos nem tesztelt feladatok: megírtam őket akkor, amikor épp ott voltam, amilyen agyállapotban épp voltam, és nem volt lektorom:(. Köszönöm még egyszer!

      Kedvelés

      • Szia Raerek!

        Ne haragudj, kicsit megkésve írok.
        Most volt időm visszatérni 🙂

        Aztán azért megcsináltam a feladatot help nélkül…csak a vastagon szedettre összpontosítottam.
        továbbra sem értettem az alatta lévőt, csak azt követően, mikor már kész voltam és a megoldásvideót is meg néztem. Valamiért összekötöttem a saccoljam meg fejben résszel…egy kis első lépésnek tekintettem és aztán gondoltam, hogy csinalni kell a fő feladatot. Ez csak számomra nem volt érthető így, (amugy amit én írtam szóról szóra majdnem az volt ami a megoldásban volt, csak egymás után írtam a printeket ‘for’ ciklus helyett, de aztán a videó alapján javítottam /kicsit sandított is a sok printnél, hogy valami nem oké, talán kezdem érezni mi az, hogy “Pythonos/nem Pythonos”/)

        Visszatérve, maximális respect a munkádért, rengeteg munka/energia van benne ez látszik, ez az amit nem lehet megköszönni, úgy van vele az ember, hogy ha fizetne akkor le lenne tudva azzal, hogy ez a munkája, az csak egy plusz pozitív faktor, hogy nagyon jól csinálja(ezért jár vissza a delikvens).
        Ezért érzem magam rosszul amikor azt kéred, ne haragudjak….hát hogy haragudnék már, mikor segítesz megváltoztatni az életem ezzel a kurva jó anyaggal.

        Ahol valami nem egyértelmű, ott persze írni fogok, láthattad…én aztán beszélek. 😀 😀

        Azt írtam, nem lehet, de azért én mégis,
        Köszönöm!
        Soha nem Donate – eltem, de itt kérdés nélkül megtenném. Apropo, lehet itt?
        És sok-sok energiát neked ehhez, maximális respect még egyszer!!

        Kedvelés

  2. “A programodban van egy import, egy listadefinícíós sor, és maga a program nem más, mint két for-ciklus, összesen négy sorban.”
    Tehát összesen 4 sor az egész?
    Mert nekem csak hosszabban jött össze a 2 for ciklussal, megnézni meg nem akarom a megoldást, ha nem muszáj….

    Kedvelés

  3. Ugyanitt volt a problémám.
    A 2 for ciklus összesen 4sor, az import és a listadefiníciós sor az plusz, tehát összesen 6.

    Kedvelés

    • Mindent meg lehet oldani def-fel, de mire akarsz most függvényt használni? Nem eszközhöz keresünk feladatot, hanem feladathoz eszközt, úgyhogy először erre kérdésre válaszolj.

      Kedvelés

  4. Mindíg az utasítás szerint készítem el a feladatokat, csak utána még kíváncsi vagyok, hogy hogyan lehetne azt másképp is, rövidebben.

    Kedvelés

    • Ezt így értem:) Hát, akkor az a megoldás, hogy megkeresed a megoldásodban az ismétlődő részeket, és azt teszed át függvénybe. Pl:
      def begyűjt(mit):
      bemenet = None
      lista = []
      while bemenet != “”:
      bemenet = input(“Adj meg egy európai:” + mit + “!”)
      if bemenet:
      lista.append(bemenet)
      print(lista)
      return lista

      Írhatod hozzá a főprogramot:)

      Kedvelés

  5. Nos, itt az én megoldásom a F0017b feladatra.
    Nemtudom, hogy ezt így elfogadod e raerek vagy sem ? 😀
    Nem igazán használtam ki a két ciklust.
    A gyorsaságát tekintve a 10 000 000 dobást 34 másodperc alatt képes elvégezni.
    #Kockadobások
    kockadobások = []
    for dobás in range(1,10000000,1):
    import random
    véletlen_szám = random.randint(1,6)
    kockadobások.append(véletlen_szám)
    egyes_szám = kockadobások.count(1)
    kettes_szám =kockadobások.count(2)
    hármas_szám =kockadobások.count(3)
    négyes_szám =kockadobások.count(4)
    ötös_szám =kockadobások.count(5)
    hatos_szám =kockadobások.count(6)
    print(‘Az 1-es:’,egyes_szám,’a 2-es:’,kettes_szám,’a 3-mas:’,hármas_szám,’a 4-es:’,négyes_szám,’az 5-ös:’,ötös_szám,’szer/szor volt fellelhető az eredményben.’)

    Kedvelés

    • A programod teljesíti amit kell, de amikor programot írsz, keresd az általánosabb megoldást – gondold át, hogyan írod át ezt a programot, ha százoldálú kockád lenne?

      Kedvelés

  6. Szia Raerek,
    Megcsináltam a F0017a feladatot. Itt a link: https://pastebin.com/9P2g4UTU
    Érdekelne a véleményed a megvalósítással kapcsolatban.
    Egy olyan gondom van, hogy amikor listából print(‘Királyságok: ‘, *kiralysagok, sep=’ ;’) iratom ki az elemeket, akkor első elem elé is beteszi a pontos vesszőt. Erre van megoldás ?

    Köszi a munkádat – nagyon hasznos és jól lehet haladni 🙂

    Kedvelés

Hozzászólás