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!
Cuprins
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.
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.