Как да използвате троичния оператор на Python

Това ръководство ще ви научи как да използвате троичния оператор в Python. Ще научите синтаксиса и ще кодирате няколко примера, за да разберете как работи.

Ще започнем, като прегледаме как работи условният оператор if-else и след това ще научим как да напишем еквивалентен израз, използвайки троичния оператор.

След това ще кодираме няколко примера и след това ще научим как да емулираме поведението на троичния оператор на Python с помощта на кортеж и речник на Python. И накрая, ще прегледаме няколко случая на употреба, когато предпочитате да използвате троичния оператор.

Нека да започнем!

Инструкцията If-Else в Python: преглед

Можете да кодирате заедно, като стартирате Python REPL или в онлайн редактора на Python на pctechbg.net.

Общият синтаксис на оператора if-else в Python е както следва:

if condition:
    # do this
else:
    # do this

В горния фрагмент условието обозначава условието, което трябва да се провери. Ако условието се изчисли като True, тогава блокът if се задейства. Ако условието се изчисли като False, тогава операторите в блока else се изпълняват.

Ето пример, при който на променливата game_over се присвоява булева стойност в зависимост от това дали стойността на енергията е по-малка или равна на нула.

  • Ако енергия <= 0, game_over е True.
  • В противен случай game_over е False.

Следният кодов фрагмент показва как да направите това с помощта на условните оператори if-else:

energy = -1

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

print(game_over)
# True

В този пример енергията е -1, което е по-малко от 0. Така че game_over е True.

Тернарен оператор на Python: Синтаксис и примери

Python има троичен оператор, който работи много като троичния условен оператор в езици като C и C++. Общият синтаксис за използването му е както следва:

expression1 if condition else expression2

Нека анализираме горния синтаксис:

  • условие: Условието за проверка.
  • израз1: Изразът за оценка дали условието е вярно.
  • израз2: Изразът за оценка дали условието е False.

Сега ще определим какво трябва да бъде изразът1, изразът2 и условието от версията if-else на кода.

  15 най-добри инструмента за проверка на плагиатство за предотвратяване на копиране през 2022 г

Събирайки всичко заедно, имаме следното, използвайки троичния оператор на Python.

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

Нека кодираме друг пример. Да предположим, че управлявате книжарница и давате на читателите отстъпка при покупката им в зависимост от това колко често са посещавали магазина ви през последната една година.

Нека numVisits означава броя на посещенията.

  • Ако numVisits > 7, процентът на отстъпката, discount_perc е 20.
  • В противен случай discount_perc е 5.

Използваме троичния оператор, за да присвоим стойност на променливата discount_perc.

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

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

След това ще научим как да емулираме троичния оператор с помощта на кортеж на Python и речник.

Емулиране на тернарния оператор с Python Tuple

Както всички итерируеми в Python, кортежите следват нулево индексиране. Така че, ако имате два елемента в кортеж, tuple_name[0] обозначава първия елемент в кортежа и tuple_name[1] дава втория елемент в кортежа.

Основните типове данни в Python са integer, float, string и Boolean. Python поддържа преобразуване на типове, което ви позволява да представите определен тип данни чрез еквивалентното му представяне в друг тип данни.

Стартирайте Python REPL и изпълнете следните примери. Ако се опитате да конвертирате цели числа в булеви стойности, ще забележите следното:

  • bool(0) е False.
  • bool(<всяко ненулево цяло число>) връща True.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

По същия начин, когато преобразуваме булеви стойности в цели числа, имаме следното:

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

Събирайки кастинга на типове и индексирането, можем да направим следното:

  • Елемент с индекс 0 в кортежа: Стойността, която да се използва, когато условието е False.
  • Елемент с индекс 1 в кортежа: Стойността, която да се използва, когато условието е True.

Използвайки горното, имаме следното:

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

Тук условието numVisits > 7 е True, тъй като numVisits е 10. Тъй като int(True) е 1, стойността на discount_perc е 20, елементът с индекс 1.

Емулиране на тернарния оператор с речника на Python

Можете да зададете True и False като ключове на речника. И можете да зададете израз1 и израз2 като стойности, съответстващи съответно на ключовете True и False.

some_dict = {True: expression1,
             False: expression2
            }

какво правиш след това Сега, ако използвате some_dict[condition], израз1, съответстващ на ключа True, се оценява, ако условието е True. И израз2 се оценява, когато условието е False.

Нека кодираме примера discount_perc (отново), но този път с помощта на речник на Python.

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

Тук numVisits = 10, което е по-голямо от 7. Следователно условието numVisits > 7 е True. Така че discount_dict[numVisits > 7] оценява на discount_dict[True] което е стойността 20.

Трябва ли винаги да използвате тернарния оператор на Python?

Досега научихме как да използваме троичния оператор. Но трябва ли винаги да използваме троичния оператор? Е, троичният оператор може да не е най-добрият избор за всички случаи на употреба. Този раздел разбива кога трябва да предпочетете използването на троичния оператор пред изразите if-else. Ще разгледаме и кога трябва да обмислим използването на оператора if-else вместо троичния оператор.

По-сбити от блоковете If-Else

Както споменахме, в Python изразът на троичния оператор е по-сбит от оператора if-else. Следователно можете да го използвате, за да проверявате за условия и да оценявате условно изрази в движение.

В следващия пример nums е списък от 100 произволно генерирани цели числа. За всяко от 100-те числа проверяваме дали е четно или нечетно. И тази оценка се извършва inline вътре в 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

Тернарният оператор изисква клаузата Else

Когато използвате условните изрази if-else, клаузата else не е задължителна. Да вземем пример. Променливата game_over е зададена на True, ако енергията спадне до стойност, по-малка или равна на нула.

Въпреки това, ако енергията е по-голяма от нула, променливата game_over никога не се инициализира. Така че ще попаднете на грешки, ако се опитате да получите достъп до променливата 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

Един от начините да поправите това е да зададете game_over на False първоначално и да го актуализирате на True, ако нивото на енергия е по-малко или равно на нула.

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

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

Въпреки това, когато използвате троичния оператор на Python, еквивалент на горния, клаузата else не е по избор. Троичният оператор изисква изразът да бъде оценен, когато условието е False.

game_over = True if energy <= 0 else False

Ако промените горното на game_over = True if energy <= 0 чрез премахване на else частта, ще попаднете на синтактична грешка, както е показано:

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

За да проверите за множество условия, използвайте изрази If-Else

Помислете за примера: Всеки въпрос в набор от въпроси за интервю за кодиране има свързан резултат за трудност. В зависимост от този резултат, ние присвояваме едно от трите нива на трудност: лесно, средно или трудно, на конкретен въпрос. Да предположим, че имаме следното:

Резултат Ниво на трудност По-малко от 10 лесно Между 10 и 20 средно По-голямо от 20 трудно

Като се има предвид резултатът за трудност, можете да получите нивото му на трудност, като използвате троичния оператор на Python, както е показано:

score = 12

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

print(difficulty_level)
# medium

Изразът на троичен оператор в горния кодов блок е в следната форма:

expression1 if condition1 else expression2 if condition2 else expression3

Въпреки че е кратък, той е малко труден за четене и разбор. Следното изображение показва как протича контролният поток в този случай.

Следният кодов фрагмент показва еквивалентна реализация, използваща изрази if-else. Както се вижда, контролният поток е много по-лесен за разбиране и кодът е по-четим.

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

print(difficulty_level)

Следователно, когато имате множество условия, трябва да използвате блоковете if-else вместо троичния оператор. Това гарантира, че кодът е лесен за четене и разбиране.

Освен това, когато трябва да изпълните множество оператори – в зависимост от това дали условието е вярно или невярно – трябва да обмислите използването на оператора if-else.

Заключение

Ето обобщение на това, което сте научили в този урок.

  • В Python троичният оператор може да се използва със следния синтаксис: израз1 ако условие друго израз2.
  • Можете да емулирате поведението на троичния оператор, като използвате кортежи и речници на Python.
  • Въпреки че троичният оператор може да бъде по-кратка алтернатива на блоковете if-else, трябва да сте сигурни, че кодът е четим. За да подобрите четливостта на кода, можете да използвате инструкциите if-else вместо троичния оператор, особено когато трябва да свържете няколко условия.

След това се научете да разгледате урока за равни и не равни оператори в Python.

  10 добри ресурса за изучаване на блокчейн и получаване на сертификат