PYTHON PROGRAMOZÁS
11. Objektumok a szótárban
A SZÓTÁR összetett adattípus. kényelmesebbé teszi a munkánkat, ha LISTA helyett használjuk.
01 Szótár szavai listával (TK. 85. old.)
(Egyszerű magyar–angol szótár készítése LISTÁVAL.)
def szótáraz(magyar_szó):
szótár = [['nagy', 'big'], #Minden szópár egy
kis lista.
['pici', 'tiny'],
['én', 'I'],
['foci', 'soccer'],
['ott', 'there'],
['szarvas', 'deer'],
['soha', 'never']]
for elem in szótár: #KERESÉS
if elem[0] == magyar_szó:
return elem[1] #A return megszakítja a függvény futását, és visszatér a találattal.
return 'Nincs ilyen szó a szótárban.'
kérdezett_szó = None #Itt kezdődik a főprogram.
while kérdezett_szó != '':
kérdezett_szó = input('Melyik magyar szóra vagy kíváncsi angolul? ')
if kérdezett_szó != '': #A ciklus addig
kérdez, amíg üres bemenetet nem kap.
print(kérdezett_szó, 'keresésének eredménye:', szótáraz(kérdezett_szó))
02 Szótár szavai szótárral (TK. 85-86. old.)
(Egyszerű magyar–angol szótár készítése SZÓTÁRRAL.)
szótár = {'nagy': 'big', #nem kis listák vannak, hanem megfeleltetés kulcs-érték párokkal
'pici': 'tiny',
'én': 'I',
'foci': 'soccer',
'ott': 'there',
'szarvas': 'deer',
'soha': 'never'}
#egy szó kikeresése: print(szótár['nagy']), nincs ciklus, nem használjuk a keresés típusalgoritmusát!
kérdezett_szó = None
while kérdezett_szó != '':
kérdezett_szó = input('Melyik magyar szóra vagy kíváncsi angolul? ')
if kérdezett_szó != '':
print(kérdezett_szó, 'keresésének eredménye:',
#szótár[kérdezett_szó]) helyett, hogy a nem létező szavakat is kezelje:
szótár.get(kérdezett_szó, 'Nincs ilyen szó.'))
A SZÓTÁRAKNAK csak a kulcsai között tudunk ilyen egyszerűen keresni.
Ha a magyar–angol szótárunkat angol–magyarrá alakítjuk, be kell járni a szótárat, ami alapesetben a kulcsokat teszi a ciklusváltozóba: for kulcs in szótár.
Ha az érték is kell, akkor a ciklus belsejében használhatjuk a
szótár[kulcs] formát, de pythonosabb, ha egyszerre kérjük el a kulcsot és az értéket is
a for kulcs, érték in szótár.items() sorral.
LISTÁS megoldásnál egyszerűen szó[0] helyett szó[1]-et írunk, és fordítva.
MEGJEGYZÉS:
- Egy szótár kulcsai között sosem lehet két azonos.
- A szótár kulcsait visszakapjuk a szótár.keys(), az értékeket a szótár.values() függvénnyel – és ezek is bejárhatók, valamint használható velük az in operátor vagy a sum() függvény
- A szótárak értékei maguk is lehetnek listák vagy szótárak, és a szótárak is tehetők listába
- Létező szótárba a szótár['új kulcs'] = 'új érték'' utasítással vehető fel új érték, a szükségtelenné vált kulcs-érték pár törlésére pedig a del szótár['törlendő kulcs'] utasítás való.
03 Osztály tárolása SZÓTÁRAKAT TARTALMAZÓ LISTÁBAN és Dezső kora (TK. 87. old.)
(A szótárakban egy-egy objektum tulajdonságait tároljuk, amikre név szerint hivatkozhatunk.
A lista miatt viszont be kell járni, ami nem jó.)
osztály = [{'név': 'Noémi', 'nem': 'l', 'kor': 15},
{'név': 'Dezső', 'nem': 'f', 'kor': 17},
{'név': 'Gizella', 'nem': 'l', 'kor': 16},
{'név': 'Edömér', 'nem': 'f', 'kor': 16}]
for tag in osztály:
if tag['név'] == 'Dezső':
print(tag['kor'])
04 Osztály tárolása SZÓTÁRAKAT TARTALMAZÓ SZÓTÁRBAN és Dezső kora (TK. 88. old.)
(Nem lehet két azonos nevű diák!)
'Dezső': {'nem': 'f', 'kor': 17},
'Gizella': {'nem': 'l', 'kor': 16},
'Edömér': {'nem': 'f', 'kor': 16}}
print(osztály['Dezső']['kor'])
05 Osztály átlagéletkora SZÓTÁRAKAT TARTALMAZÓ SZÓTÁRBAN (TK. 88. old. 1. feladat)
'Dezső': {'nem': 'f', 'kor': 17},
'Gizella': {'nem': 'l', 'kor': 16},
'Edömér': {'nem': 'f', 'kor': 16}}
összeg = 0
for tag in osztály:
összeg += osztály[tag]['kor'] #látjuk, hogy mit csinál a kód
print('Az osztály átlagéletkora', összeg/len(osztály), 'év.')
06 Fiúk és lányok SZÓTÁRAKAT TARTALMAZÓ SZÓTÁRBAN (TK. 88. old. 2. feladat)
(A lányok vannak többen, vagy a fiúk?)
'Dezső': {'nem': 'f', 'kor': 17},
'Gizella': {'nem': 'l', 'kor': 16},
'Edömér': {'nem': 'f', 'kor': 16}}
lányok = 0
for tag in osztály:
if osztály[tag]['nem'] == 'l':
lányok += 1
if lányok > len(osztály) - lányok:
print('A lányok vannak többen.')
elif lányok < len(osztály) - lányok:
print('A fiúk vannak többen.')
else:
print('A fiúk pont annyian vannak, mint a lányok.')
07 Vonósnégyes SZÓTÁRAKAT TARTALMAZÓ SZÓTÁRBAN (TK. 88. old. )
(Előző lecke vonósnégyesének jelenléti íve szótárral.)
ív = {'egyik hegedűs': [1, 1, 1, 1, 1],
'másik hegedűs': [1, 1, 1, 1, 0],
'brácsás': [1, 1, 0, 0, 0],
'csellós': [0, 1, 1, 1, 1]}
for ember in ív:
print(ember)