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.
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ésKedvelé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ésKedvelé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ésKedvelé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ésKedvelés
“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ésKedvelés
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ésKedvelés
Így oldottam meg az első feladatot: https://ghostbin.com/paste/q5k7u
Emellett én máshonnan is szerzek információkat pythonhoz és az lenne a kérdésem, hogy valahogy meglehet oldani ezt def-el?:D
KedvelésKedvelé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ésKedvelés
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ésKedvelé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ésKedvelés
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ésKedvelé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ésKedvelés
https://pastebin.com/nWSYqn5b
csak ezerig mert nagyon soká tart 🙂
KedvelésKedvelés
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ésKedvelés
Jó a megoldás, a problémát meg a join https://pythonidomar.wordpress.com/tag/join/ használata oldja majd meg a legegyszerűbben.
És örülök:)
KedvelésKedvelés