11.1 Operator trójargumentowy
W Pythonie istnieje tak zwany operator trójargumentowy, który w zasadzie jest zmodyfikowanym operatorem if
else
.
Załóżmy, że masz kod:
if a < b:
min = a
else:
min = b
Aby taki prosty kod nie zajmował dużo miejsca, wymyślono dla niego kompaktową formę zapisu. Wygląda ona tak:
min = a if a < b else b
Ogólny wygląd operatora trójargumentowego można opisać formą:
zmienna = wartość1 if warunek else wartość2
Jeśli warunek jest prawdziwy, to zmiennej przypisywana jest wartość1, jeśli jest fałszywy — wartość2.
Zwróć uwagę, że po warunku nie stawiamy dwukropka.
11.2 Operator else w pętlach
W Pythonie, operator else
jest często kojarzony z operatorami warunkowymi if
. Jednak jego użycie nie ogranicza się do tego i można go również stosować w pętlach for
i while
.
Ten nieoczywisty aspekt else
w kontekście pętli może być trudny do zrozumienia dla początkujących, ale otwiera ciekawe możliwości zarządzania przepływem programu.
Jak działa else
w pętlach
W pętlach else
wykonuje się po zakończeniu pracy pętli, ale tylko wtedy, gdy pętla zakończyła się normalnie (to znaczy nie została przerwana przez break
). Ta cecha czyni else
przydatnym dla scenariuszy, w których trzeba sprawdzić, czy pętla została przerwana przedwcześnie.
Przykład użycia w pętli for
:
for i in range(3):
password = input('Podaj hasło: ')
if password == 'sekret':
print('Hasło przyjęte.')
break
else:
print('Brak prób wpisu lub wszystkie wpisane hasła są nieprawidłowe.')
Tutaj else
uruchamia się, jeśli użytkownik trzy razy wprowadzi błędne hasło. Jeśli użytkownik poda poprawne hasło, pętla przerywa się break
, a blok else
nie jest wykonywany.
Przykład użycia w pętli while
:
n = 5
while n > 0:
print(n)
n -= 1
else:
print('Pętla zakończyła się normalnie.')
W tym przypadku else
uruchamia się po tym, jak pętla zakończy się naturalnie, ponieważ warunek stał się fałszywy.
Praktyczne zastosowanie
Użycie else
w pętlach może być szczególnie przydatne w algorytmach wyszukiwania, gdzie trzeba określić, czy wyszukiwanie było udane. Na przykład, przy wyszukiwaniu elementu na liście, który nie istnieje, można użyć else
do wyświetlenia wiadomości o niepowodzeniu po zakończeniu pętli.
Używaj else
w pętlach jasno i konsekwentnie, aby nie wprowadzać w błąd tych, którzy będą czytać twój kod. Pamiętaj, że else
w pętlach nie zawsze jest intuicyjny, dlatego warto dodawać komentarze lub wybierać inne metody implementacji logiki, jeśli to sprawia, że kod jest bardziej zrozumiały.
11.3 Zagnieżdżone pętle
W Pythonie można napisać bardzo skomplikowaną logikę w bardzo kompaktowy sposób. W niektórych przypadkach potrzebne będą zagnieżdżone if-y, w innych — zagnieżdżone pętle. O niektórych niuansach ich działania teraz porozmawiamy:
Zagnieżdżona pętla oznacza obecność jednej pętli wewnątrz drugiej. Pozwala to na przykład na przetwarzanie tablic wielowymiarowych, list list lub innych zagnieżdżonych struktur danych.
Zagnieżdżone pętle składają się z zewnętrznej pętli i jednego lub kilku wewnętrznych cykli. Za każdym razem, gdy zewnętrzna pętla wykonuje jedną iterację, wewnętrzna pętla wykonuje się w całości:
for i in range(3): # Zewnętrzna pętla
for j in range(3): # Wewnętrzna pętla
print(f"({i}, {j})")
Z punktu widzenia zewnętrznej pętli, wewnętrzna pętla i jej zawartość to po prostu blok poleceń, które wykonują się dla każdej iteracji zewnętrznej pętli. Zewnętrzna pętla nie zwraca uwagi na to, co ma w środku, ile tam jest pętli itd. Ona po prostu wykonuje swój wewnętrzny blok poleceń za każdym razem dla zmiennej ze swojej listy.
Stwórzmy teraz tabliczkę mnożenia
— zagnieżdżone pętle idealnie pasują do tego zadania. Tworzenie tabliczki mnożenia za pomocą zagnieżdżonych pętli, gdzie jedna pętla odpowiada za mnożnik, a druga za mnożną:
n = 5
for i in range(1, n + 1):
for j in range(1, n + 1):
print(f"{i} * {j} = {i * j}", end='\t')
print() # Przejście do nowej linii dla następnego mnożnika
Ten przykład wyświetli tabelę:
1 * 1 = 1 1 * 2 = 2 1 * 3 = 3 1 * 4 = 4 1 * 5 = 5
2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10
3 * 1 = 3 3 * 2 = 6 3 * 3 = 9 3 * 4 = 12 3 * 5 = 15
4 * 1 = 4 4 * 2 = 8 4 * 3 = 12 4 * 4 = 16 4 * 5 = 20
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
Aby lepiej zrozumieć zagnieżdżone pętle, musisz po prostu więcej ćwiczyć — to najszybszy sposób, aby opanować niemal każdą nieoczywistą rzecz w programowaniu.
GO TO FULL VERSION