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