INSTRUKCJE WARUNKOWE W PYTHON
INSTRUKCJE WARUNKOWE W PYTHON
Wyobraź sobie, że stoisz na rozdrożu. W zależności od tego, w którą stronę chcesz iść, wybierasz odpowiednią ścieżkę. W programowaniu działa to podobnie. Instrukcje warunkowe pozwalają nam powiedzieć komputerowi: "Jeśli coś jest prawdą, zrób to, a jeśli nie, zrób coś innego".
Najprostsza instrukcja warunkowa to if. Działa ona tak:
if warunek:
# Jeśli warunek jest prawdziwy, wykonaj ten kod. Kod ten musi być wewnątrz instrukcji if (wcięty - 1raz tabulator)
Przykład:
wiek = 18
if wiek >= 18:
print("Jesteś pełnoletni.")
W tym przykładzie, jeśli zmienna wiek jest większa lub równa 18, zostanie wydrukowany komunikat.
Możemy dodać do instrukcji if część else, która zostanie wykonana, jeśli warunek nie jest spełniony:
if warunek:
# Jeśli warunek jest prawdziwy
else:
# Jeśli warunek jest fałszywy
Przykład:
wiek = 16
if wiek >= 18:
print("Jesteś pełnoletni.")
else:
print("Jesteś niepełnoletni.")
Jeśli mamy więcej niż dwie możliwości, możemy użyć elif (skrót od "else if"):
if warunek1:
# Jeśli warunek1 jest prawdziwy
elif warunek2:
# Jeśli warunek1 jest fałszywy, a warunek2 jest prawdziwy
else:
# Jeśli żaden z powyższych warunków nie jest spełniony
Przykład:
ocena = 4
if ocena >= 5:
print("Bardzo dobrze!")
elif ocena >= 3:
print("Dobrze.")
else:
print("Możesz lepiej.")
Możemy łączyć warunki za pomocą operatorów logicznych:
and: Oba warunki muszą być prawdziwe
or: Przynajmniej jeden warunek musi być prawdziwy
not: Neguje wartość logiczną
Przykład:
wiek = 17
czy_ma_prawo_jazdy = False
if wiek >= 18 and czy_ma_prawo_jazdy:
print("Możesz prowadzić samochód.")
W warunkach często używamy operatorów porównania:
==: równe
!=: różne
<: mniejsze
>: większe
<=: mniejsze lub równe
>=: większe lub równe
Przykład:
liczba = 10
if liczba % 2 == 0:
print("Liczba jest parzysta.")
Match-case to konstrukcja wprowadzona w Pythonie 3.10, która oferuje bardziej elegancki i wyraźny sposób wykonywania warunkowych instrukcji, szczególnie w przypadku porównywania wartości z różnymi wzorcami. Jest to swoisty odpowiednik instrukcji switch z innych języków programowania, ale z dodatkowymi możliwościami, które czynią go bardziej elastycznym.
Słowo kluczowe match: Rozpoczyna blok match-case.
Wartość do porównania: Po słowie match podajemy wartość, którą chcemy porównać z różnymi wzorcami.
Case: Następnie definiujemy różne przypadki (case), każdy z unikalnym wzorcem.
Porównanie: Python porównuje wartość z każdym wzorcem, aż znajdzie dopasowanie.
Wykonanie: Jeśli zostanie znalezione dopasowanie, kod w tym przypadku zostanie wykonany.
Warunek domyślny: Możemy użyć znaku podkreślenia (_) jako wzorca domyślnego, który zostanie dopasowany, jeśli żaden inny wzorzec nie pasuje.
x = 42
match x:
case 0:
print("Zero")
case 42:
print("To jest odpowiedź na ostateczne pytanie o życie, wszechświat i wszystko.")
case _:
print("Inna liczba")
Porównanie wartości: Możemy porównywać wartości liczbowe, łańcuchy znaków, a nawet bardziej złożone obiekty.
Wzorce literale: Możemy używać wzorców literale, aby dopasować konkretne wartości.
Wzorce zmiennych: Możemy używać wzorców zmiennych, aby przypisać wartości do zmiennych.
Wzorce sekwencji: Możemy dopasowywać sekwencje (listy, krotki) do określonych wzorców.
Wzorce klas: Możemy dopasowywać obiekty do określonych klas.
Warunki dodatkowe: Możemy dodawać dodatkowe warunki do wzorców za pomocą operatora if.
point = (0, 0)
match point:
case (0, 0):
print("Początek układu współrzędnych")
case (x, y) if x == y:
print("Punkt leży na prostej y=x")
case _:
print("Inny punkt")
Czytelność: Konstrukcja match-case często czyni kod bardziej czytelnym niż zagnieżdżone instrukcje if-elif-else.
Wyraźność: Pozwala na wyraźne określenie różnych przypadków i dopasowanie wzorców.
Elastyczność: Oferuje wiele możliwości dopasowywania wzorców, co czyni go bardzo uniwersalnym.
Wydajność: W niektórych przypadkach match-case może być wydajniejszy niż wielokrotne instrukcje if-elif-else.
Kiedy używać match-case?
Wielokrotne porównania: Gdy chcesz porównać jedną wartość z wieloma innymi.
Złożone wzorce: Gdy potrzebujesz dopasowywać bardziej złożone struktury danych.
Kiedy chcesz zwiększyć czytelność kodu.
Oprócz klasycznych instrukcji if, elif i else, Python oferuje kilka innych mechanizmów, które mogą być użyte do kontrolowania przepływu programu na podstawie określonych warunków.
Jest to skrócona forma instrukcji if-else, która pozwala przypisać wartość do zmiennej w zależności od warunku.
wartosc = 10
wynik = "Liczba jest dodatnia" if wartosc > 0 else "Liczba jest ujemna lub zero"
print(wynik)
Chociaż nie jest to bezpośrednio instrukcja warunkowa, list comprehension pozwala na tworzenie list na podstawie warunków.
liczby = [1, 2, 3, 4, 5]
parzyste = [x for x in liczby if x % 2 == 0]
print(parzyste) # Wynik: [2, 4]
Funkcje lambda to anonimowe funkcje, które mogą być używane z funkcją filter do filtrowania elementów sekwencji na podstawie określonego warunku.
liczby = [1, 2, 3, 4, 5]
parzyste = list(filter(lambda x: x % 2 == 0, liczby))
print(parzyste) # Wynik: [2, 4]
Generatory są podobne do list comprehension, ale zamiast tworzyć całą listę na raz, generują elementy na żądanie.
def parzyste_liczby(n):
for i in range(n):
if i % 2 == 0:
yield i
for liczba in parzyste_liczby(10):
print(liczba)