Jak korzystać z operatora trójskładnikowego Pythona

Opublikowany: 2023-01-04

Ten przewodnik nauczy Cię, jak używać operatora trójskładnikowego w Pythonie. Poznasz składnię i kod kilku przykładów, aby zrozumieć, jak to działa.

Zaczniemy od przyjrzenia się, jak działa instrukcja warunkowa if-else, a następnie nauczymy się pisać równoważne wyrażenie za pomocą operatora trójskładnikowego.

Następnie zakodujemy kilka przykładów, a następnie nauczymy się emulować zachowanie operatora trójskładnikowego Pythona przy użyciu krotki i słownika Pythona. Na koniec przejrzymy kilka przypadków użycia, w których powinieneś preferować użycie operatora trójskładnikowego.

Zaczynajmy!

Instrukcja if-else w Pythonie: przegląd

Możesz kodować razem, uruchamiając Python REPL lub w internetowym edytorze Python Geekflare.

Ogólna składnia instrukcji if-else w Pythonie jest następująca:

 if condition: # do this else: # do this

W powyższym fragmencie condition oznacza warunek do sprawdzenia. Jeśli warunek ma wartość True , wówczas uruchamiany jest blok if. Jeśli warunek ma wartość False , wykonywane są instrukcje wewnątrz bloku else.

Oto przykład, w którym zmienna game_over ma przypisaną wartość logiczną w zależności od tego, czy wartość energy jest mniejsza lub równa zeru.

  • Jeśli energy <= 0 , game_over ma wartość True .
  • W przeciwnym razie game_over jest fałszywe.

Poniższy fragment kodu pokazuje, jak to zrobić za pomocą instrukcji warunkowych if-else:

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

W tym przykładzie energy wynosi -1, czyli mniej niż 0. Więc game_over ma wartość True.

Operator trójskładnikowy w Pythonie: składnia i przykłady

python-operator trójskładnikowy-1

Python ma potrójny operator, który działa bardzo podobnie do trójskładnikowego operatora warunkowego w językach takich jak C i C++. Ogólna składnia jej użycia jest następująca:

 expression1 if condition else expression2

Przeanalizujmy powyższą składnię:

  • condition : Warunek do sprawdzenia.
  • expression1 : wyrażenie do oceny, czy warunek jest prawdziwy.
  • expression2 : Wyrażenie do oceny, czy warunek ma wartość Fałsz.

Teraz ustalimy, jakie expression1 1 , expression2 2 i condition powinny pochodzić z wersji kodu if-else.

trójskładnikowy-op-ex1

Łącząc to wszystko razem, mamy następujące użycie operatora trójskładnikowego Pythona.

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

Zakodujmy inny przykład. Załóżmy, że prowadzisz księgarnię i dajesz czytelnikom rabat na zakupy w zależności od tego, jak często odwiedzali Twój sklep w ciągu ostatniego roku.

Niech numVisits oznacza liczbę odwiedzin.

  • Jeśli numVisits > 7 , procent rabatu, discount_perc wynosi 20.
  • W przeciwnym razie discount_perc wynosi 5.

Używamy operatora trójskładnikowego, aby przypisać wartość do zmiennej discount_perc .

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

Następnie nauczymy się emulować operatora trójskładnikowego przy użyciu krotki Pythona i słownika.

Emulowanie operatora trójskładnikowego za pomocą krotki Pythona

Podobnie jak wszystkie elementy iterowalne w Pythonie, krotki podążają za indeksowaniem zerowym. Więc jeśli masz dwa elementy w krotce, tuple_name[0] oznacza pierwszy element w krotce, a tuple_name[1] podaje drugi element w krotce.

Podstawowe typy danych w Pythonie to liczby całkowite, zmiennoprzecinkowe, łańcuchowe i logiczne. Python obsługuje rzutowanie typów, które pozwala reprezentować określony typ danych przez jego równoważną reprezentację w innym typie danych.

Uruchom REPL w języku Python i uruchom następujące przykłady. Jeśli spróbujesz przekonwertować liczby całkowite na wartości logiczne, zauważysz, co następuje:

  • bool(0) jest False .
  • bool(<any non-zero integer>) zwraca True .
 >>> bool(0) False >>> bool(1) True >>> bool(-1) True >>> bool(10) True

Podobnie, podczas rzutowania wartości Boolean na liczby całkowite, otrzymujemy:

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

Łącząc rzutowanie typów i indeksowanie, możemy wykonać następujące czynności:

  • Element o indeksie 0 w krotce: Wartość, która ma być używana, gdy condition ma wartość False .
  • Element o indeksie 1 w krotce: Wartość, która ma być używana, gdy condition ma wartość True .

Korzystając z powyższego mamy:

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

Tutaj warunek numVisits > 7 jest True , ponieważ numVisits wynosi 10. Ponieważ int(True) wynosi 1, wartość discount_perc wynosi 20, element o indeksie 1.

Emulowanie operatora trójskładnikowego za pomocą słownika Pythona

Możesz ustawić True i False jako klucze słownika. Możesz też ustawić expression1 i expression2 jako wartości odpowiadające odpowiednio kluczom True i False .

 some_dict = {True: expression1, False: expression2 }

Co zrobisz następnie? Teraz, jeśli użyjesz some_dict[condition] , expression1 odpowiadające kluczowi True jest oceniane, jeśli condition ma wartość True . A expression2 jest oceniane, gdy condition ma wartość False .

discount_perc przykład Discount_perc (ponownie), ale tym razem używając słownika Pythona.

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

Tutaj numVisits = 10 , co jest większe niż 7. Dlatego warunek numVisits > 7 to True . Tak więc discount_dict[numVisits > 7] discount_dict[True] , która jest wartością 20.

Czy zawsze powinieneś używać operatora trójskładnikowego Pythona?

Czy zawsze należy używać operatora trójskładnikowego Pythona

Do tej pory nauczyliśmy się, jak używać operatora trójskładnikowego. Ale czy zawsze powinniśmy używać operatora trójskładnikowego? Cóż, potrójny operator może nie być najlepszym wyborem dla wszystkich przypadków użycia. Ta sekcja rozkłada się, kiedy powinieneś preferować użycie operatora trójskładnikowego zamiast instrukcji if-else. Omówimy również, kiedy powinniśmy rozważyć użycie instrukcji if-else zamiast operatora trójskładnikowego.

Bardziej zwięzłe niż bloki if-else

Jak wspomniano, w Pythonie wyrażenie operatora trójskładnikowego jest bardziej zwięzłe niż instrukcja if-else. W związku z tym można go używać do sprawdzania warunków i warunkowej oceny wyrażeń w locie.

W poniższym przykładzie nums to lista 100 losowo wygenerowanych liczb całkowitych. Dla każdej ze 100 liczb sprawdzamy, czy jest ona parzysta czy nieparzysta. A ta ocena odbywa się w linii wewnątrz struny 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

Operator trójskładnikowy wymaga klauzuli else

Gdy używasz instrukcji warunkowych if-else, klauzula else jest opcjonalna. Weźmy przykład. Zmienna game_over jest ustawiona na True , jeśli energy spadnie do wartości mniejszej lub równej zeru.

Jeśli jednak energy jest większa od zera, zmienna game_over nigdy nie jest inicjowana. Więc napotkasz błędy, jeśli spróbujesz uzyskać dostęp do zmiennej 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

Jednym ze sposobów rozwiązania tego problemu jest początkowe ustawienie game_over na False i zaktualizowanie go na True , jeśli poziom energii jest mniejszy lub równy zeru.

 energy = 5 game_over = False if energy <= 0: game_over1 = True print(f"Is the game over? {game_over}")

Jednakże, gdy używany jest odpowiednik powyższego operatora trójskładnikowego Pythona, klauzula else nie jest opcjonalna. Operator trójskładnikowy wymaga obliczenia wyrażenia, gdy condition ma wartość False .

 game_over = True if energy <= 0 else False

Jeśli zmienisz powyższe na game_over = True if energy <= 0 , usuwając część else, napotkasz błąd składniowy, jak pokazano:

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

Aby sprawdzić wiele warunków, użyj instrukcji if-else

Rozważmy przykład: Każde pytanie w zestawie pytań do rozmowy kwalifikacyjnej ma powiązany wynik trudności. W zależności od tego wyniku, do danego pytania przypisujemy jeden z trzech poziomów trudności: łatwy, średni lub trudny. Załóżmy, że mamy następujące:

Wynik Poziom trudności
Mniej niż 10 łatwy
Między 10 a 20 średni
Większe niż 20 ciężko

Biorąc pod uwagę wynik trudności, możesz uzyskać jego poziom trudności za pomocą trójskładnikowego operatora Pythona, jak pokazano:

 score = 12 difficulty_level = "easy" if score < 10 else "hard" if score > 20 else "medium" print(difficulty_level) # medium

Wyrażenie operatora trójskładnikowego w powyższym bloku kodu ma następującą postać:

 expression1 if condition1 else expression2 if condition2 else expression3

Choć zwięzły, jest nieco trudny do odczytania i przeanalizowania. Poniższy obraz pokazuje, jak przebiega przepływ sterowania w tym przypadku.

przykład operatora trójskładnikowego

Poniższy fragment kodu przedstawia równoważną implementację przy użyciu instrukcji if-else. Jak widać, przepływ sterowania jest znacznie łatwiejszy do zrozumienia, a kod jest bardziej czytelny.

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

Dlatego, gdy masz wiele warunków, powinieneś użyć bloków if-else zamiast operatora trójskładnikowego. Dzięki temu kod jest łatwy do odczytania i zrozumienia.

Ponadto, gdy trzeba wykonać wiele instrukcji — w zależności od tego, czy warunek jest prawdziwy, czy fałszywy — należy rozważyć użycie instrukcji if-else.

Wniosek

Oto podsumowanie tego, czego nauczyłeś się w tym samouczku.

  • W Pythonie operator trójskładnikowy może być używany z następującą składnią: expression1 if condition else expression2 .
  • Możesz emulować zachowanie operatora trójskładnikowego za pomocą krotek i słowników Pythona.
  • Chociaż operator trójskładnikowy może być bardziej zwięzłą alternatywą dla bloków if-else, należy upewnić się, że kod jest czytelny. Aby poprawić czytelność kodu, możesz użyć instrukcji if-else zamiast operatora trójskładnikowego, zwłaszcza gdy musisz połączyć wiele warunków.

Następnie zapoznaj się z samouczkiem dotyczącym równych i nierównych operatorów w Pythonie.