Pętle w Python - for, while i comprehensions

Pętle w Python

Wprowadzenie do pętli

Pętle to konstrukcje programistyczne, które pozwalają na wielokrotne wykonywanie tego samego bloku kodu. W Pythonie mamy do dyspozycji dwa główne typy pętli: for i while.

Pętla for

Pętla for jest używana do iteracji po sekwencjach (listach, tuple, ciągach znaków, itp.):

Podstawowa składnia:

# Iteracja po liście
owoce = ["jabłko", "banan", "gruszka"]
for owoc in owoce:
    print(owoc)

# Wynik:
# jabłko
# banan
# gruszka

Używanie range():

# Liczby od 0 do 4
for i in range(5):
    print(i)

# Liczby od 1 do 5
for i in range(1, 6):
    print(i)

# Co drugi element
for i in range(0, 10, 2):
    print(i)  # 0, 2, 4, 6, 8

Enumerate() - indeks i wartość:

kolory = ["czerwony", "zielony", "niebieski"]
for indeks, kolor in enumerate(kolory):
    print(f"{indeks}: {kolor}")

# Wynik:
# 0: czerwony
# 1: zielony
# 2: niebieski

Pętla while

Pętla while wykonuje się dopóki warunek jest prawdziwy:

licznik = 0
while licznik < 5:
    print(f"Licznik: {licznik}")
    licznik += 1

# Wynik:
# Licznik: 0
# Licznik: 1
# Licznik: 2
# Licznik: 3
# Licznik: 4

Nieskończona pętla z break:

while True:
    odpowiedz = input("Wpisz 'quit' aby zakończyć: ")
    if odpowiedz == "quit":
        break
    print(f"Napisałeś: {odpowiedz}")

Instrukcje kontrolne

break - przerwanie pętli:

for i in range(10):
    if i == 5:
        break
    print(i)  # Wyświetli: 0, 1, 2, 3, 4

continue - pominięcie iteracji:

for i in range(10):
    if i % 2 == 0:  # jeśli parzysta
        continue
    print(i)  # Wyświetli: 1, 3, 5, 7, 9

else w pętlach:

for i in range(5):
    print(i)
else:
    print("Pętla zakończona normalnie")

# else wykonuje się tylko gdy pętla nie została przerwana przez break

List Comprehensions

List comprehensions to elegancki sposób tworzenia list w jednej linii:

Podstawowa składnia:

# Tradycyjna pętla
kwadraty = []
for x in range(10):
    kwadraty.append(x**2)

# List comprehension
kwadraty = [x**2 for x in range(10)]

print(kwadraty)  # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Z warunkiem:

# Tylko parzyste kwadraty
parzyste_kwadraty = [x**2 for x in range(10) if x % 2 == 0]
print(parzyste_kwadraty)  # [0, 4, 16, 36, 64]

Zagnieżdżone comprehensions:

# Macierz 3x3
macierz = [[i+j for j in range(3)] for i in range(3)]
print(macierz)  # [[0, 1, 2], [1, 2, 3], [2, 3, 4]]

Dictionary i Set Comprehensions

Dictionary comprehension:

# Słownik kwadratów
kwadraty_dict = {x: x**2 for x in range(5)}
print(kwadraty_dict)  # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

Set comprehension:

# Zbiór pozostałości z dzielenia
reszty = {x % 3 for x in range(10)}
print(reszty)  # {0, 1, 2}

Praktyczne przykłady

Suma elementów:

liczby = [1, 2, 3, 4, 5]
suma = sum(liczba for liczba in liczby if liczba % 2 == 1)
print(suma)  # 9 (1+3+5)

Przetwarzanie tekstu:

tekst = "Python jest super"
duze_litery = [slowo.upper() for slowo in tekst.split()]
print(duze_litery)  # ['PYTHON', 'JEST', 'SUPER']

Najlepsze praktyki

  1. Używaj for zamiast while gdy wiesz ile iteracji potrzebujesz
  2. List comprehensions są szybsze niż tradycyjne pętle
  3. Unikaj modyfikowania listy podczas iteracji po niej
  4. Używaj enumerate() gdy potrzebujesz indeksu
  5. Pamiętaj o break i continue dla kontroli przepływu

Podsumowanie

Pętle są nieodłącznym elementem programowania w Pythonie. Opanowanie różnych typów pętli i ich zaawansowanych form jak comprehensions znacznie zwiększy efektywność Twojego kodu i sprawi, że będzie on bardziej czytelny.