03/28/2024

Cum se utilizează operatorul ternar Python

Acest ghid vă va învăța cum să utilizați operatorul ternar în Python. Veți învăța sintaxa și veți codifica mai multe exemple pentru a înțelege cum funcționează.

Vom începe prin a revizui modul în care funcționează instrucțiunea condiționată if-else și apoi vom învăța cum să scriem o expresie echivalentă folosind operatorul ternar.

În continuare, vom codifica câteva exemple și apoi vom învăța cum să emulăm comportamentul operatorului ternar al lui Python folosind un tuplu și un dicționar Python. În cele din urmă, vom analiza câteva cazuri de utilizare când ar trebui să preferați să utilizați operatorul ternar.

Sa incepem!

Declarația If-Else în Python: O revizuire

Puteți codifica prin pornirea unui REPL Python sau în editorul online Python al tipstrick.ro.

Sintaxa generică a instrucțiunii if-else în Python este următoarea:

if condition:
    # do this
else:
    # do this

În fragmentul de mai sus, condiția denotă condiția care trebuie verificată. Dacă condiția este evaluată la True, atunci blocul if este declanșat. Dacă condiția se evaluează la Fals, atunci instrucțiunile din blocul else sunt executate.

Iată un exemplu în care variabilei game_over i se atribuie o valoare booleană în funcție de faptul dacă valoarea energiei este sau nu mai mică sau egală cu zero.

  • Dacă energia <= 0, game_over este adevărată.
  • În caz contrar, game_over este False.

Următorul fragment de cod arată cum să faceți acest lucru folosind instrucțiunile condiționate if-else:

energy = -1

if energy <= 0:
    game_over = True
else:
    game_over = False

print(game_over)
# True

În acest exemplu, energia este -1 care este mai mică de 0. Deci game_over este adevărat.

Operator ternar Python: sintaxă și exemple

Python are un operator ternar care funcționează mult ca operatorul condițional ternar în limbaje precum C și C++. Sintaxa generală pentru utilizare este următoarea:

expression1 if condition else expression2

Să analizăm sintaxa de mai sus:

  • condiție: condiția de verificat.
  • expresie1: expresia de evaluat dacă condiția este adevărată.
  • expresie2: expresia de evaluat dacă condiția este falsă.

Acum, vom identifica ce expresie1, expresie2 și condiție ar trebui să fie din versiunea if-else a codului.

Punând totul împreună, avem următoarele utilizând operatorul ternar al lui Python.

game_over = True if energy <= 0 else False
print(game_over)
# True

Să codificăm un alt exemplu. Să presupunem că conduci o librărie și le oferi cititorilor o reducere la achiziția lor, în funcție de cât de des au vizitat magazinul tău în ultimul an.

  Interfonul îmbunătățește satisfacția clienților, Gan.ai a strâns 5,2 milioane USD

Lăsați numVisits să desemneze numărul de vizite.

  • Dacă numVisites > 7, procentul de reducere, discount_perc este 20.
  • În caz contrar, discount_perc este 5.

Folosim operatorul ternar pentru a atribui valoare variabilei discount_perc.

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

print(discount_perc)
# 20 (as numVisits = 10 which is > 7)

În continuare, vom învăța cum să emulăm operatorul ternar folosind un tuplu Python și un dicționar.

Emularea operatorului ternar cu Python Tuple

La fel ca toate iterabilele din Python, tuplurile urmează indexarea zero. Deci, dacă aveți două elemente într-un tuplu, tuple_name[0] denotă primul element din tuplu și tuple_name[1] dă al doilea element din tuplu.

Tipurile de date de bază în Python sunt întregi, flotanți, șir și boolean. Python acceptă tipul de turnare care vă permite să reprezentați un anumit tip de date prin reprezentarea sa echivalentă într-un alt tip de date.

Porniți un Python REPL și rulați următoarele exemple. Dacă încercați să convertiți numere întregi în booleeni, veți observa următoarele:

  • bool(0) este fals.
  • bool() returnează Adevărat.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

În mod similar, atunci când turnăm boolean în numere întregi, avem următoarele:

>>> int(True)
1
>>> int(False)
0

Punând împreună turnarea și indexarea tipului, putem face după cum urmează:

  • Element la indicele 0 în tuplu: valoarea care trebuie utilizată atunci când condiția este falsă.
  • Element la indicele 1 din tuplu: valoarea care trebuie utilizată atunci când condiția este adevărată.

Folosind cele de mai sus, avem următoarele:

>>> numVisits = 10
>>> discount_perc = (5,20)[numVisits > 7]
>>> discount_perc
# 20

Aici, condiția numVisits > 7 este adevărată, așa cum numVisits este 10. Deoarece int(True) este 1, valoarea discount_perc este 20, elementul de la indicele 1.

Emularea operatorului ternar cu dicționarul Python

Puteți seta True și False ca taste ale dicționarului. Și puteți seta expression1 și expression2 ca valori corespunzătoare cheilor True și, respectiv, False.

some_dict = {True: expression1,
             False: expression2
            }

Ce faci mai departe? Acum, dacă folosești some_dict[condition], expresia1 corespunzătoare cheii True este evaluată dacă condiția este True. Și expresia2 este evaluată atunci când condiția este False.

Să codificăm exemplul discount_perc (din nou), dar de data aceasta folosind un dicționar Python.

>>> numVisits = 10
>>> discount_dict = {True: 20, False:5}
>>> discount_perc = discount_dict[numVisits > 7]
>>> discount_perc
# 20

Aici, numVisits = 10, care este mai mare decât 7. Prin urmare, condiția numVisits > 7 este adevărată. Deci discount_dict[numVisits > 7] evaluează la discount_dict[True] care este valoarea 20.

Ar trebui să utilizați întotdeauna operatorul ternar Python?

Până acum, am învățat cum să folosim operatorul ternar. Dar ar trebui să folosim întotdeauna operatorul ternar? Ei bine, operatorul ternar poate să nu fie cea mai bună alegere pentru toate cazurile de utilizare. Această secțiune descompune când ar trebui să preferați utilizarea operatorului ternar în detrimentul instrucțiunilor if-else. Vom acoperi, de asemenea, când ar trebui să luăm în considerare utilizarea instrucțiunii if-else în loc de operatorul ternar.

Mai concise decât blocurile If-Else

După cum sa menționat, în Python, expresia operatorului ternar este mai concisă decât declarația if-else. Prin urmare, îl puteți folosi pentru a verifica condițiile și pentru a evalua expresii condiționat din mers.

În exemplul următor, nums este o listă de 100 de numere întregi generate aleatoriu. Pentru fiecare dintre cele 100 de numere, verificăm dacă este par sau impar. Și această evaluare are loc în interiorul șirului f.

import random

nums = [random.choice(range(100)) for i in range(10)]

for num in nums:
    print(f"{num} is {'even' if num%2==0 else 'odd'}")
# sample output

0 is even
56 is even
6 is even
53 is odd
62 is even
7 is odd
8 is even
77 is odd
41 is odd
94 is even

Operatorul ternar necesită clauza Else

Când utilizați instrucțiunile condiționale if-else, clauza else este opțională. Să luăm un exemplu. Variabila game_over este setată la True dacă energia scade la o valoare mai mică sau egală cu zero.

Totuși, dacă energia este mai mare decât zero, variabila game_over nu este niciodată inițializată. Deci veți întâlni erori dacă încercați să accesați variabila game_over.

energy = 5
if energy <= 0:
    game_over = True

print(f"Is the game over? {game_over}")
Traceback (most recent call last):
  File "ternary_op.py", line 39, in <module>
    print(f"Is the game over? {game_over}")
NameError: name 'game_over' is not defined

O modalitate de a remedia acest lucru este să setați inițial game_over la False și să îl actualizați la True dacă nivelul de energie este mai mic sau egal cu zero.

energy = 5
game_over = False
if energy <= 0:
    game_over1 = True

print(f"Is the game over? {game_over}")

Cu toate acestea, atunci când se utilizează operatorul ternar Python echivalent al celor de mai sus, clauza else nu este opțională. Operatorul ternar necesită ca expresia să fie evaluată atunci când condiția este Fals.

game_over = True if energy <= 0 else False

Dacă schimbați cele de mai sus la game_over = True if energy <= 0 prin eliminarea părții else, veți întâlni o eroare de sintaxă, așa cum se arată:

File "ternary_op.py", line 42
    game_over = True if energy <= 0
                                  ^
SyntaxError: invalid syntax

Pentru a verifica mai multe condiții, utilizați instrucțiuni If-Else

Luați în considerare exemplul: Fiecare întrebare dintr-un set de întrebări de interviu de codificare are asociat un scor de dificultate. În funcție de acest scor, atribuim unei anumite întrebări unul dintre cele trei niveluri de dificultate: ușor, mediu sau greu. Să presupunem că avem următoarele:

ScorNivel de dificultateMai putin de 10 usorIntre 10 si 20 mediu Mai mare de 20 greu

Având în vedere scorul de dificultate, puteți obține nivelul de dificultate folosind operatorul ternar Python, așa cum se arată:

score = 12

difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium"

print(difficulty_level)
# medium

Expresia operatorului ternar din blocul de cod de mai sus are următoarea formă:

expression1 if condition1 else expression2 if condition2 else expression3

Deși concis, este puțin dificil de citit și de analizat. Următoarea imagine arată cum are loc fluxul de control în acest caz.

Următorul fragment de cod arată o implementare echivalentă folosind instrucțiuni if-else. După cum s-a văzut, fluxul de control este mult mai ușor de înțeles, iar codul este mai ușor de citit.

if score < 10:
    difficulty_level="easy"
elif score > 20:
    difficulty_level="hard"
else:
    difficulty_level="medium"

print(difficulty_level)

Prin urmare, atunci când aveți mai multe condiții, ar trebui să utilizați blocurile if-else în loc de operatorul ternar. Acest lucru asigură că codul este ușor de citit și de înțeles.

De asemenea, atunci când trebuie să executați mai multe instrucțiuni – în funcție de dacă condiția este adevărată sau falsă – ar trebui să luați în considerare utilizarea instrucțiunii if-else.

Concluzie

Iată o recapitulare a ceea ce ați învățat în acest tutorial.

  • În Python, operatorul ternar poate fi folosit cu următoarea sintaxă: expresie1 if condiție else expresie2.
  • Puteți emula comportamentul operatorului ternar folosind tupluri și dicționare Python.
  • În timp ce operatorul ternar poate fi o alternativă mai concisă la blocurile if-else, ar trebui să vă asigurați că codul este lizibil. Pentru a îmbunătăți lizibilitatea codului, puteți utiliza instrucțiunile if-else în loc de operatorul ternar, mai ales când trebuie să înlănțuiți mai multe condiții.

În continuare, învață să verifici tutorialul despre operatori egali și nu egali în Python.

  Cum să vizualizați Centrul de notificări pe iPhone și iPad
x