Како користити Питхон тернарни оператор

Овај водич ће вас научити како да користите тернарни оператор у Питхон-у. Научићете синтаксу и кодирати неколико примера да бисте разумели како функционише.

Почећемо тако што ћемо прегледати како функционише условни израз иф-елсе, а затим научити како да напишемо еквивалентни израз користећи тернарни оператор.

Затим ћемо кодирати неколико примера, а затим научити како да емулирамо понашање Питхон-овог тернарног оператора користећи Питхон тупле и речник. На крају, прегледаћемо неколико случајева коришћења када бисте радије користили тернарни оператор.

Почнимо!

Наредба Иф-Елсе у Питхон-у: Преглед

Можете кодирати тако што ћете покренути Питхон РЕПЛ или у вдзвдз-овом онлајн Питхон уређивачу.

Генеричка синтакса иф-елсе изјаве у Питхон-у је следећа:

if condition:
    # do this
else:
    # do this

У горњем исечку, услов означава услов који треба проверити. Ако се услов процењује на Тачно, тада се покреће иф блок. Ако је услов процењен на Фалсе, онда се извршавају искази унутар елсе блока.

Ево примера где је променљивој гаме_овер додељена Боолеан вредност у зависности од тога да ли је вредност енергије мања или једнака нули.

  • Ако је енергија <= 0, гаме_овер је Тачно.
  • Иначе, гаме_овер је Фалсе.

Следећи исечак кода показује како се то ради помоћу условних изјава иф-елсе:

energy = -1

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

print(game_over)
# True

У овом примеру, енергија је -1 што је мање од 0. Дакле, гаме_овер је Тачно.

Питхон тернарни оператор: синтакса и примери

Питхон има тернарни оператор који функционише као тернарни условни оператор у језицима као што су Ц и Ц++. Општа синтакса за коришћење је следећа:

expression1 if condition else expression2

Хајде да рашчланимо горњу синтаксу:

  • услов: Услов за проверу.
  • израз1: израз за процену да ли је услов Тачан.
  • израз2: израз за процену да ли је услов Фалсе.

Сада ћемо идентификовати који израз1, израз2 и услов треба да буду из иф-елсе верзије кода.

  Како да извршите мерење плата да бисте задржали свој најбољи таленат

Стављајући све заједно, имамо следеће користећи Питхон-ов тернарни оператор.

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

Хајде да кодирамо још један пример. Претпоставимо да имате књижару и дате читаоцима попуст на куповину у зависности од тога колико су често посећивали вашу продавницу у последњих годину дана.

Нека нумВиситс означава број посета.

  • Ако је број посета > 7, проценат попуста, дисцоунт_перц је 20.
  • Иначе, попуст_перц је 5.

Користимо тернарни оператор да доделимо вредност променљивој дисцоунт_перц.

numVisits = 10

discount_perc = 20 if numVisits > 7 else 5

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

Затим ћемо научити како да емулирамо тернарни оператор користећи Питхон тупле и речник.

Емулација тернарног оператора са Питхон тупле-ом

Као и сви итерабле у Питхон-у, тупле прате нулто индексирање. Дакле, ако имате два елемента у тупле, тупле_наме[0] означава први елемент у тупле и тупле_наме[1] даје други елемент у тупле.

Основни типови података у Питхон-у су цео број, флоат, стринг и Боолеан. Питхон подржава преливање типова које вам омогућава да представите одређени тип података његовим еквивалентним представљањем у другом типу података.

Покрените Питхон РЕПЛ и покрените следеће примере. Ако покушате да конвертујете целе бројеве у Булове, приметићете следеће:

  • боол(0) је Фалсе.
  • боол(<било који цео број који није нула>) враћа Тачно.
>>> bool(0)
False
>>> bool(1)
True
>>> bool(-1)
True
>>> bool(10)
True

Слично, када претварамо Боолеан у целе бројеве, имамо следеће:

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

Састављајући преливање типа и индексирање, можемо да урадимо следеће:

  • Елемент са индексом 0 у тупле: вредност која се користи када је услов Фалсе.
  • Елемент са индексом 1 у тупле: вредност која се користи када је услов Тачан.

Користећи горе наведено, имамо следеће:

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

Овде је услов нумВиситс > 7 Тачан јер је нумВиситс 10. Пошто је инт(Труе) 1, вредност дисцоунт_перц је 20, елемент са индексом 1.

Емулација тернарног оператора помоћу Питхон речника

Можете поставити Тачно и Нетачно као кључеве речника. И можете поставити израз1 и израз2 као вредности које одговарају кључевима Тачно и Нетачно, респективно.

some_dict = {True: expression1,
             False: expression2
            }

шта ћеш даље? Сада ако користите соме_дицт[condition], израз1 који одговара кључу Тачно се процењује ако је услов Тачан. А израз2 се вреднује када је услов Фалсе.

Хајде да кодирамо пример дисцоунт_перц (поново), али овог пута користећи Питхон речник.

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

Овде је нумВиситс = 10 што је веће од 7. Према томе, услов нумВиситс > 7 је Тачан. Дакле дисцоунт_дицт[numVisits > 7] вреднује у дисцоунт_дицт[True] што је вредност 20.

Да ли увек треба да користите Питхон тернарни оператор?

До сада смо научили како да користимо тернарни оператор. Али да ли увек треба да користимо тернарни оператор? Па, тернарни оператор можда није најбољи избор за све случајеве употребе. У овом одељку је објашњено када бисте радије користили тернарни оператор у односу на иф-елсе изјаве. Такође ћемо покрити када би требало да размотримо коришћење иф-елсе наредбе уместо тернарног оператора.

Концизнији од блокова Ако-Елсе

Као што је поменуто, у Питхон-у, израз тернарног оператора је сажетији од наредбе иф-елсе. Стога га можете користити за проверу услова и условно процену израза у ходу.

У следећем примеру, нумс је листа од 100 насумично генерисаних целих бројева. За сваки од 100 бројева проверавамо да ли је непаран или паран. И ова евалуација се дешава инлине унутар ф-стринга.

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

Тернарни оператор захтева клаузулу Елсе

Када користите условне изразе иф-елсе, клаузула елсе је опциона. Узмимо пример. Променљива гаме_овер је постављена на Тачно ако енергија падне на вредност мању или једнаку нули.

Међутим, ако је енергија већа од нуле, променљива гаме_овер се никада не иницијализује. Дакле, наићи ћете на грешке ако покушате да приступите променљивој гаме_овер.

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

Један од начина да се ово поправи је да на почетку поставите гаме_овер на Фалсе и ажурирате га на Тачно ако је ниво енергије мањи или једнак нули.

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

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

Међутим, када користите Питхон тернарни оператор еквивалентан горе наведеном, клаузула елсе није опциона. Тернарни оператор захтева да се израз процени када је услов Фалсе.

game_over = True if energy <= 0 else False

Ако промените горе наведено у гаме_овер = Тачно ако је енергија <= 0 уклањањем дела елсе, наићи ћете на синтаксичку грешку, као што је приказано:

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

Да бисте проверили више услова, користите изјаве Иф-Елсе

Размотрите пример: Свако питање у сету питања кодирања интервјуа има придружени резултат тежине. У зависности од овог резултата, одређеном питању додељујемо један од три нивоа тежине: лак, средњи или тежак. Претпоставимо да имамо следеће:

Оцена Ниво тежине Мање од 10 лако Између 10 и 20 средње веће од 20 тешко

С обзиром на оцјену тежине, можете добити његов ниво тежине користећи Питхон тернарни оператор као што је приказано:

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 score < 10:
    difficulty_level="easy"
elif score > 20:
    difficulty_level="hard"
else:
    difficulty_level="medium"

print(difficulty_level)

Стога, када имате више услова, требало би да користите иф-елсе блокове уместо тернарног оператора. Ово осигурава да је код лак за читање и разумевање.

Такође, када треба да извршите више наредби — у зависности од тога да ли је услов тачан или нетачан — требало би да размислите о коришћењу иф-елсе наредбе.

Закључак

Ево резимеа онога што сте научили у овом водичу.

  • У Питхон-у, тернарни оператор се може користити са следећом синтаксом: израз1 ако услов елсе израз2.
  • Можете емулирати понашање тернарног оператора користећи Питхон тупле и речнике.
  • Иако тернарни оператор може бити сажетија алтернатива блоковима иф-елсе, требало би да обезбедите да је код читљив. Да бисте побољшали читљивост кода, можете користити иф-елсе изразе уместо тернарног оператора, посебно када треба да повежете више услова.

Затим научите да погледате водич о једнаким а не једнаким операторима у Питхон-у.