PYTHON PROGRAMOZÁS
9. Típusalgoritmusok 3.
Olyan algoritmusok (programozási tételek), amelyekkel a programírás során felmerülő problémák egyszerűen megoldhatók.
15 ELDÖNTÉS - nem konkrét érték előfordulását vizsgáljuk (TK. 75. old. 1. feladat)
(Volt-e olyan, hogy a pincér vásárolt valamit, vagy mindig csak neki fizettek?)
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
vásárolt_a_pincér = False
for bevétel in bevételek:
if bevétel < 0:
vásárolt_a_pincér = True
break
if vásárolt_a_pincér:
print('Volt, hogy a pincér vásárolt is.')
else:
print('Csak a pincérnek fizettek.')
16 ÖSSZEGZÉS (TK. 75. old. 2. feladat)
(Mennyi pénz van a pincér pénztárcájában? )
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
print('A pénztárcában', sum(bevételek), 'font van.')
17 MEGSZÁMOLÁS (TK. 75. old. 3. feladat)
(Hány alkalommal kapott pennyt is, nem csak fontot? )
Akkor kap pennyt is, ha pozitív törtszám a lista vizsgált eleme.
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
ennyiszer_kapott_pennyt = 0
for bevétel in bevételek:
if bevétel > 0 and bevétel % 1 != 0:
ennyiszer_kapott_pennyt += 1
print('A pincér', ennyiszer_kapott_pennyt,'alkalommal kapott pennyt.')
18 ÖSSZEGZÉS (TK. 76. old. 4. feladat)
(Hány pennyt kapott összesen a pincér? )
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
ennyi_pennyt_kapott_fontban = 0
for bevétel in bevételek:
if bevétel > 0 and bevétel % 1 != 0:
ennyi_pennyt_kapott_fontban += bevétel % 1
print('A pincér', ennyi_pennyt_kapott_fontban * 100,'pennyt kapott.')
A pennyk száma nem egész szám, sok nullát követően egy pici
érték még lesz a végén. Ez a probléma a törtszámok kettes számrendszerben való tárolásából adódik.
• az eredmény kerekítése – a round() függvénnyel
• az eredmény egésszé alakítása – az int() függvénnyel
• a törtszámok nagyobb pontossággal való tárolása – a decimal modul
19 MEGSZÁMOLÁS (TK. 76. old. 5. feladat)
(Hány esetben kapott legalább öt fontot a pincér? )
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
ennyiszer_kapott_legalább_5_fontot = 0
for bevétel in bevételek:
if bevétel >= 5:
ennyiszer_kapott_legalább_5_fontot += 1
print('A pincér', ennyiszer_kapott_legalább_5_fontot,'alkalommal kapott legalább 5 fontot.')
20 MAXIMUMKIVÁLASZTÁS (TK. 77. old. 6. feladat)
(Mi állt a legnagyobb számlán, amit fizettek a pincérnél? )
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
print('A legnagyobb számlán', max(bevételek), 'állt.')
21 ÖSSZEGZÉS (TK. 77. old. 7. feladat)
(Ha az óra elején már volt 8 font 23 penny a tárcájában, mennyi pénz volt benne az óra végén? )
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
def kiszámol(bevételek_listája, kezdeti_pénz):
végső_pénz = sum(bevételek_listája) + kezdeti_pénz
return végső_pénz
eleve_a_tárcában = float(input('Mennyi pénz \ van a pincérnél az óra elején? '))
#float = törtszámmá alakít
print('A pénztárcában',round(kiszámol(bevételek, eleve_a_tárcában), 2),'font van.')
#round = 2 tizedesre kerekít
22 KERESÉS (TK. 77. old. 8. feladat)
(Hányadik vendég fizetett 9 forintot? )
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
print('A ', bevételek.index(9)+1, '. vendég fizetett 9 fontot.', sep='')
23 KERESÉS (TK. 77. old. 9. feladat)
(Ha volt olyan vendég, aki 10 forintnál többet fizetett, akkor hányadik vendég volt az első ilyen? )
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
van_több_mint_10 = False
hol_van = 0
for index in range(len(bevételek)):
if bevételek[index] > 10:
van_több_mint_10 = True
hol_van = index
break
if van_több_mint_10:
print('Az első tíz fontnál többet fizető vendég a(z) ', hol_van+1, '. vendég.', sep='')
#index = hányadik helyen áll
24 KERESÉS (TK. 78. old. 10. feladat)
(Ha volt olyan vendég, aki 10 forintnál többet fizetett, akkor hányadik vendég volt az utolsó ilyen? )
Kihagyjuk a break utasítást – ilyenkor végiglépdel a ciklusunk az összes listaelemen, és az utolsó tíznél nagyobb elem pozíciója marad a hol_van változóban. (hosszú listáknál nem hatékony)
A bejárandó indexeket előállító range() függvényt így paraméterezzük:
range(len(bevételek)-1, -1, -1).
A len() 8-at ad vissza, ezért az első –1
használatával kivonunk belőle egyet, hogy a lista utolsó értékétől, azaz héttől járjuk
be a listát.
A második –1 az első olyan értéket adja meg, amit a range() már nem
ad vissza – azaz 0-ig tart a bejárás.
A harmadik –1 azt mondja meg, hogy egyesével
akarunk haladni visszafelé.
25 ELDÖNTÉS (TK. 78. old. 11. feladat)
(Írjuk ki, ha volt olyan vendég, akinek módjában állt csupa ötfontossal kiegyenlíteni a számlát! )
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
for bevétel in bevételek:
if bevétel % 5 == 0:
print('Volt olyan vendég, aki tudott csupa ötfontossal fizetni.')
break
26 MEGSZÁMOLÁS (TK. 79. old. 12. feladat)
(Ha a főnöke minden vendég után fél fontot ad pincérünknek fizetésül, mekkora bevétellel
zárta az órát?)
bevételek = [3, 8, 10, 19.35, -6, 5.1, 9, 20]
vendégek = 0
for bevétel in bevételek:
if bevétel > 0:
vendégek += 1
print('A pincér', round(vendégek/2, 2 ), 'font fizetést kap.')
27 MEGSZÁMOLÁS (TK. 79. old. 13. feladat)
(Hány szóból áll a mondat?)
mondat = ['Én', 'elmentem', 'a', 'vásárba', 'fél', 'pénzen.']
print('A mondat', len(mondat), 'szóból áll.')
28 MINIMUMKIVÁLASZTÁS (TK. 79. old. 14. feladat)
(Hány betűs a legrövidebb szó? )
mondat = ['Én', 'elmentem', 'a', 'vásárba', 'fél', 'pénzen.']
legrövidebb_szó_hossza = 1000 #aminél biztosan van kisebb
for szó in mondat:
if len(szó) < legrövidebb_szó_hossza:
legrövidebb_szó_hossza = len(szó) #ha a mostani rövidebb, mint az eddigi legrövidebb
print('A legrövidebb szó', legrövidebb_szó_hossza, 'karakteres.')
29 ELDÖNTÉS (TK. 80. old. 15. feladat)
(Írjuk ki, ha van a mondatban olyan szó, amely után mondatvégi írásjel áll! )
mondat = ['Én', 'elmentem', 'a', 'vásárba', 'fél', 'pénzen.']
írásjelek = '.?!'
for szó in mondat:
if szó[-1] in írásjelek: # -1. index az utolsó karakter
print('Van olyan szó, ami után írásjel áll.')
30 ELDÖNTÉS (TK. 80. old. 16. feladat)
(Hány névelő van a mondatban? )
mondat = ['Én', 'elmentem', 'a', 'vásárba', 'fél', 'pénzen.']
névelők = ['a', 'az', 'egy']
for szó in mondat:
if szó in névelők:
print('Van a mondatban névelő.')
31 KERESÉS (TK. 80. old. 17. feladat)
(Hányadik szó a "fél"? )
mondat = ['Én', 'elmentem', 'a', 'vásárba', 'fél', 'pénzen.']
print('A mondatban a "fél" szó a ', mondat.index('fél')+1, '. helyen áll.', sep='')
32 KERESÉS (TK. 80. old. 18. feladat)
(Van-e a mondatban nagy kezdőbetűs szó, és ha igen, akkor hol?)
mondat = ['Én', 'elmentem', 'a', 'vásárba', 'fél', 'pénzen.']
van_nagy_kezdőbetűs = False
hol_van = None
for index in range(len(mondat)):
if mondat[index][0].isupper():
van_nagy_kezdőbetűs = True
hol_van = index
if van_nagy_kezdőbetűs:
print('A(z) ', hol_van+1,'. szó kezdődik nagy betűvel.', sep='')
Nem a lista értékei, hanem az azokból képzett értékek figyelésével hozunk döntést.
A listát
index szerint járjuk be, mert azt is tudni akarjuk, hogy hányadik szó kezdődik nagy kezdőbetűvel. Az isupper() függvénnyel vizsgáljuk, hogy egy adott betű nagybetű-e.
(Nem hatékony, mert amikor talált szót, akkor nem hagyja abba.)