Python az iskolában Wiki
Advertisement

A feltételes kifejezést (vagy feltételes értékadást) a Pythonban többféleképpen is megvalósíthatjuk.

A klasszikus megoldás[]

Ez a C nyelv feltétel ? igazérték : hamisérték szerkezetének felel meg:

<igazérték> if <feltétel> else <hamisérték>

Példa:

minimum=a if a<b else b

A trükkös megoldás: listaelem kiválasztása[]

Azt használjuk ki, hogy a hamis logikai érték nullának, az igaz egynek felel meg, és ezzel indexeljük a kételemű listát. Példa a konzolról (a minimum kiválasztása másképp):

>>> a=7
>>> b=9
>>> print([b,a][a<b])
7

Figyelem! Mivel a hamis logikai érték a nulla, ezért a listában a hamisértéket írtuk előre! (Tehát éppen fordítva, mint a klasszikus feltétes kifejezésben.)

Logikai műveletekkel[]

A Python a logikai műveleteket addig értékeli ki, amíg bizonyosságot nem nyer, tovább nem. Látni fogjuk a példák között, hogy a ki nem értékelt részben a nullával való osztás nem okoz hibát. Figyeljünk oda, hogy

  • az alábbi kifejezések típusa függhet a változók értékétől!
  • a példák azt mutatják, hogy – meglepő módon – az and és az or nem kommutatív!

A jobb olvashatóság érdekében üres sorokkal tagoltuk a példákat, a konzolon ezek közvetlenül egymás után jönnek. (Természetesen programszövegben is ugyanígy használhatjuk őket, kísérletezésre viszont kényelmesebb a konzol. Programszövegben értékadásban vagy print() függvényben használhatjuk a kifejezéseket, a puszta kifejezés hatására nem jelenik meg semmi a képernyőn.)

>>> x=6
>>> y=0
>>> y and x/y
0

>>> y or x/y
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ZeroDivisionError: int division or modulo by zero

>>> y!=0 and x/y
False

>>> y and x/y or 'Hiba!'
'Hiba!'


>>> y=-3
>>> y and x/y
-2.0

>>> y or x/y
-3

>>> x/y and y
-3

>>> x/y or y
-2.0

>>> y!=0 and x/y
-2.0

>>> y and x/y or 'Hiba!'
-2.0


>>> a=7
>>> b=9
>>> a<b and a
7

>>> a>b and a
False

>>> a<b and a or b
7

>>> a>b and a or b
9

Egy példa: szótár olvasása hibaüzenet nélkül[]

Ebben a példában egy szótárban (asszociatív tömbben) tárolunk néhány telefonszámot. Ha olyant akarunk kiolvasni, amelyik nem létezik, KeyError kivételt kapunk – ezt akár elágazással, akár kivételkezeléssel kivédhetjük. De van egy harmadik módszer, amelyik egyszerre teszteli azt, hogy létezik-e a kulcs és hogy ahhoz rendeltünk-e létező értéket:

>>> telefon = {
...   'Jancsi' : '301234567',
...   'Juliska' : '201234567',
...   'Mama' : '',
... }

>>> ember = 'Jancsi'
>>> telefon[ember]
'301234567'

>>> ember = 'boszorka'
>>> telefon[ember]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'boszorka'

>>> ember = 'Mama'
>>> telefon[ember]
''


>>> def szám(ember):
...     return ember in telefon and telefon[ember] or 'Nem tudjuk.'
...
>>> for e in ['Jancsi','Juliska','Mama','boszorka']:
...     print(e+':',szám(e))
...
Jancsi: 301234567
Juliska: 201234567
Mama: Nem tudjuk.
boszorka: Nem tudjuk.

Az utolsó két sor megérdemel egy kis magyarázatot: a boszorkánál az első feltétel vált hamissá, mert nincs ilyen kulcs, Mamánál pedig a második, mert a kulcshoz tartozó érték egy üres string, amely ugyan definíció szerint nem azonos a hamis értékkel (a ''==False sor eredménye False), de feltételvizsgálatban mégis hamis értéket szolgáltat, szemben tetszőleges nem üres stringgel. Természetesen ha a Mama nem lenne elérhetetlen a gyerekek számára, Jancsi és Juliska nem kóborolna összevissza az erdőben, és nem jutna a boszorka karmai közé. Szűrjük le a tanulságot ebből!

Egyéb[]

Feltételes kifejezéseket készíthetünk lambdafüggvényekkel is.

Lásd még[]

Advertisement