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)
(M
ennyi 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.)

Készítsd el weboldaladat ingyen! Ez a weboldal a Webnode segítségével készült. Készítsd el a sajátodat ingyenesen még ma! Kezdd el