Python gyerekeknek - feltételkezelés

Kategória: Python gyerekeknek.

Egyszerű feltétel

Elmélet

A fentiekben megismerkedtünk a szöveggel és a számokkal. A következő alaptípus a logikai, ami igaz és hamis értéket vehet fel. Ezt a Pythonban így hívjuk: True és False (így, nagy kezdőbetűvel). Ennek a feltételkezelésnél van szerepe.

A feltételkezelésnél a következőket kell megjegyeznünk:

  • Az if utasítással indul, ami azt jelent angolul, hogy ha.
  • Az if után jön a feltétel. (Aki már látott más programozási nyelvet: itt a feltételt nem kell zárójelek közé tenni.)
  • A sort kettősponttal (:) zárjuk.
  • Azt az utasítást, vagy azokat az utasításokat, amelyeket akkor szeretnénk, hogy lefussanak, ha a feltétel igaz, egyformán beljebb kell húzni.

Példa:

number = 3
if number > 2:
    print('A szám nagyobb kettőnél.')

Ha ezt lefuttatjuk, akkor kiírja, hogy a szám nagyobb kettőnél. Ugyanez a logika Scratch-ben:

feltetel.png

Próbáljuk ki azt, hogy az első sorban a számot átírtuk egy olyan számra, ami nem nagyobb kettőnél, pl. number = 1, és futtassuk le ismét. Ez esetben nem ír ki semmit.

Több utasítást is írhatunk a belső ágra; ez esetben fontos, hogy az utasítások egyformán legyenek behúzva:

number = 1
if number > 2:
    print('A szám nagyobb kettőnél.')
    print('A szám még minding nagyobb kettőnél.')
print('Feltétel után')

A feltételnek lehet egy "különben" ága is, ami akkor fut le, amikor a feltétel nem igaz. Ez az else:

number = 1
if number > 2:
    print('A szám nagyobb kettőnél.')
else:
    print('A szám nem nagyobb kettőnél.')

Ebben a példában azt fogja kiírni, hogy a szám nem nagyobb kettőnél. Scratch-ben ezt a következőképpen programozhatjuk:

kulonben.png

Ha több feltételt és több ágat szeretnénk, akkor azt az elif segítségével tudjuk megtenni:

number = 2
if number > 2:
    print('A szám nagyobb kettőnél.')
elif number < 2:
    print('A szám kisebb kettőnél.')
else:
    print('A szám pont kettő.')

Ami azt írja ki, hogy a szám pont kettő.

Ezt Scracth-ben már csak összetett módon tudjuk lekódolni:

osszetettha.png

A feltételek egymásba is ágyazhatóak; ez esetben még jobban kell ügyelnünk a behúzásokra:

number = 4
if number > 2:
    print('A szám nagyobb kettőnél.')
    if number > 5:
        print('A szám ötnél is nagyobb')
    else:
        print('De a szám ötnél nem nagyobb.')
else:
    print('A szám nem nagyobb kettőnél.')

A fentiekben azt vizsgáltuk, hogy a szám nagyobb-e vagy kisebb-e mint kettő. De vajon hogyan vizsgáljuk azt, hogy a szám pontosan kettő-e? Először most kivételesen lássuk, hogyan tudtuk ezt Scratch-ben megoldani:

egyenloseg.png

Ott tehát egy egyenlőségjel (=) van. Csakhogy ez a Pythonban már "foglalt": ott értékadást jelent. Az egyenlőség vizsgálathoz két egyenlőségjelet kell használnunk (==):

number = 2
if number == 2:
    print('A szám pont kettő.')

Tagadni a not szócskával tudunk:

number = 3
if not number == 2:
    print('A szám nem kettő.')

Ám ennek van egy gyakoribb formája: az == helyett ezt írjuk: !=:

number = 3
if number != 2:
    print('A szám nem kettő.')

Ugyanez Scratch-ben:

nemegyenlo.png

A Pythonban van még két összehasonlító művelet, ami (közvetlenül) nincs Scratch-ben: a nagyobb vagy egyenlő (>=) és a kisebb vagy egyenlő (<=):

number = 2
if number >= 2:
    print('A szám nagyobb vagy egyenlő mint kettő.')
if number <= 2:
    print('A szám kisebb vagy egyenlő mint kettő.')

A példában mindkettő feltétel igaz lesz.

Feladat

Vajon hogyan lehet szöveget összehasonlítani? Már egész sokat tudunk; készítsük el a következő játékot:

  • A program tegyen föl egy kérdést
  • Kérje be a választ.
  • Hasonlítsa össze a helyes válasszal.
    • Ha helyes, akkor írja ki, hogy helyes.
    • Ha nem helyes, akkor írja ki, hogy nem helyes, és a helyes választ is írja ki.
  • Legyen összesen 5 kérdés.
  • A végén írja ki, hogy hány százalékot ért el a játékos.
points = 0
 
answer = input('Mi Magyarország fővárosa? ')
if answer == 'Budapest':
    print('Helyes!')
    points = points + 1
else:
    print('A válasz helytelen; a helyes válasz Budapest lett volna.')
print()
 
answer = input('Hány fokon forr a víz? ')
if answer == '100':
    print('Helyes!')
    points = points + 1
else:
    print('A válasz helytelen; a helyes válasz 100 lett volna.')
print()
 
answer = input('Melyik az az állat, amelyiknek nagy füle és hosszú ormánya van? ')
if answer == 'elefánt':
    print('Helyes!')
    points = points + 1
else:
    print('A válasz helytelen; a helyes válasz elefánt lett volna.')
print()
 
answer = input('Hogy mondjuk angolul azt, hogy alma? ')
if answer == 'apple':
    print('Helyes!')
    points = points + 1
else:
    print('A válasz helytelen; a helyes válasz apple lett volna.')
print()
 
answer = input('Mi volt Petőfi vezetéknevű költőnk keresztneve? ')
if answer == 'Sándor':
    print('Helyes!')
    points = points + 1
else:
    print('A válasz helytelen; a helyes válasz Sándor lett volna.')
print()
 
percentage = str(100 * points / 5) + '%'
print('Az eredmény: ' + percentage)

Önálló feladat

Tegyen fel egy olyan kérdést, aminek az eredménye szám (pl. mikor született valaki), és írja ki azt, hogy eltalálta, ill. a helyes válasz kisebb vagy nagyobb a beírtnál. (Tipp: számmá kell konvertálni az int(s) eljárással.)

Teszt

1. feladat

Mit jelent az alábbi feltétel?

if x % 2 == 1:

A Semmit; ilyen művelet nincs.
B Megvizsgálja, hogy az x páros-e.
C Megvizsgálja, hogy az x páratlan-e.
D Megvizsgálja, hogy 2 egyenlő-e 1-gyel (mindig hamis).

2. feladat

Mit jelent az alábbi feltétel?

if 2 < x < 5:

A Ez hibás.
B Megvizsgálja, hogy az x 2 és 5 közötti-e.
C Megvizsgálja, hogy az x kisebb-e mint 5 vagy nagyobb-e mint 2; lényegben tehát mindig igazat ad.
D Megvizsgálja, hogy az x 2-nél kisebb-e vagy 5-nél nagyobb-e.

3. feladat

Mit csinál az alábbi kód?

if x > 2:
    print('A szám nagyobb kettőnél.')
else:
    print('A szám pont kettő.')
elif x < 2:
    print('A szám kisebb kettőnél.')

A Semmit; ez hibás.
B Az x értékétől függően kiírja, hogy a szám nagyobb kettőnél, pont kettő vagy kisebb kettőnél.
C Ha az x pont kettő, rosszul működik, egyébként jól.
D Csak akkor működik jól, ha x pont kettő.

Több feltétel

Elmélet

Ha több feltételnek kell egyszerre teljesülnie, akkor azokat az and (magyarul és) szócskával tudjuk összekötni:

number = 3
if number > 2 and number < 5:
    print('A szám nagyobb mint kettő, és kisebb mint öt.')

Itt tehát a feltétel akkor lesz igaz, ha a szám nagyobb mint 2 és ugyanakkor kisebb mint 5. Ugyanez Scratch-ben:

logikaies.png

Ha legalább az egyik feltételnek teljesülnie kell, akkor az or (vagy) szócskát használhatjuk:

number = 3
if number < 2 or number > 2:
    print('A szám nem kettő.')

Scratch-ben:

logikaivagy.png

A logikai és és vagy műveteket (az összehasonlítással és a tagadással) tetszőleges mélységben kombinálhatjuk. Szükség esetén zárójeleket használhatunk. A Pythonnak (és a többi programozási nyelvnek) óriási előnye a Scratch-csel szemben az, hogy a feltételeket több sorba törhetjük, míg Scratchben egy-egy bonyolultabb feltétel már alig fér ki a képernyőre.

number = 8
if (number > 2 and number < 5) or (number > 7 and number < 9):
   print('A szám 2 és 5 közötti vagy 7 és 9 közötti.')

Ill.:

osszetettfeltetel.png

Emiatt is érdemesebb összetettebb feladatokra olyan programozási nyelvet használni, mint a Python, a Scratch-csel szemben.

A feltételeknél ismerjünk meg egy szöveg műveletet is, mégpedig azt, hogy egy szöveg tartalmaz-e egy adott betűt. Ezt az in operátorral tudjuk megtenni:

name = 'Csaba'
if 'a' in name:
    print("A név tartalmazza az 'a' betűt")

Figyeljük meg, hogy most nem egyszeres, hanem kétszeres idézőjelek közé tettük a szöveget, hogy a betűt egyszeres idézőjelek közé tehessük a szövegen belül!

A Scratch-ben ugyanez:

tartalmazza.png

Feladat

Kérdezze meg a program a hőmérsékletet, valamint azt, hogy esik-e az eső. Ha a hómérséklet 15 és 25 fok közötti, és nem esik az eső, akkor írja ki azt, hogy kellemes kirándulóidő van, egyébként meg azt írja ki, hogy nincs rossz idő, csak rosszul felkészült kiránduló.

temperature = input('Hány fok van? ')
rain = input('Esik az eső (igen/nem)? ')
temperature_int = int(temperature)
if temperature_int >= 15 and temperature_int <= 25 and rain == 'nem':
    print('Szép kirándulóidő van!')
else:
    print('Nincs rossz idő, csak rosszul felkészült kiránduló.')

Önálló feladat

Bonyolítsunk a fenti időjárásos feladatot a következőképpen: ha fúj a szél, akkor 20-30 fok között van szép kirándulóidő, ha nem fúj, akkor 10-25 fok között.

Teszt

1. feladat

Mit jelent az alábbi feltétel (x egy egész szám)?

if x > 2 and x < 5:

A Ez szintaktikailag egy hibás kód; ez lenne a helyes: 2 < x and x < 5.
B Megvizsgálja, hogy az x 2 és 5 között van-e, a határokat is beleértve, így 2, 3, 4 és 5 esetén ad vissza igaz értéket.
C Megvizsgálja, hogy az x 2 és 5 között van-e, de nem beleértve a határokat, így 3 és 4 esetén ad vissza igaz értéket.
D Mindig igazat ad, az x értékétől függetlenül.

2. feladat

Mit jelent az alábbi feltétel (x egy egész szám)?

if 2 <= x and x <= 5:

A Ez szintaktikailag egy hibás kód; így lenne helyes: x >= 2 and x <= 5.
B Megvizsgálja, hogy az x 2 és 5 között van-e, a határokat is beleértve, így 2, 3, 4 és 5 esetén ad vissza igaz értéket.
C Megvizsgálja, hogy az x 2 és 5 között van-e, de nem beleértve a határokat, így 3 és 4 esetén ad vissza igaz értéket.
D Mindig igazat ad, az x értékétől függetlenül.

3. feladat

Mit jelent az alábbi feltétel (x egy egész szám)?

if x <= 5 or 2 <= x:

A Ez szintaktikailag egy hibás kód; így lenne helyes: x >= 2 and x <= 5.
B Megvizsgálja, hogy az x 2 és 5 között van-e, a határokat is beleértve, így 2, 3, 4 és 5 esetén ad vissza igaz értéket.
C Megvizsgálja, hogy az x 2 és 5 között van-e, de nem beleértve a határokat, így 3 és 4 esetén ad vissza igaz értéket.
D Mindig igazat ad, az x értékétől függetlenül.

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License