Döngüler: for ve while (Python Dersi 6)

Geçen iki derste not ortalaması hesaplayan bir program yazdık. Ama üç not için üç ayrı input satırı yazmak zorunda kaldık. 30 öğrencinin notunu girmek isteseydin 30 satır mı yazacaktın? Bu derste bilgisayarın en sevdiği işi öğreniyoruz: aynı şeyi sıkılmadan tekrar tekrar yapmak. Buna döngü deniyor.

Bu dersin kodları ve alıştırmaları hazır bir not defterinde: Colab’da Aç.

Döngü ne demek?

Günlük hayatta döngülerle doluyuz: “Sepetteki her elmayı yıka”, “çay demlenene kadar bekle”. İlki bir listedeki her eleman için bir iş yapmak, ikincisi bir koşul sağlanıncaya kadar beklemek. Python’da bunların karşılığı iki ayrı döngü:

  • for: “Elimdeki her şey için bunu yap.” Kaç kez döneceği baştan bellidir.
  • while: “Bu koşul doğru olduğu sürece bunu yap.” Ne zaman duracağı koşula bağlıdır.

for: her biri için

notlar = [70, 85, 90]
for n in notlar:
print(n)
# 70
# 85
# 90

notlar bir liste: köşeli parantez içinde virgülle sıralanmış değerler. Listeleri bir sonraki derste ayrıntılı göreceğiz; şimdilik “birden fazla değeri bir arada tutan kutu” diye düşün.

for n in notlar: satırını şöyle oku: “notlar içindeki her değer için, o değere n de ve alttaki işi yap.” Döngü ilk turda n‘e 70, ikinci turda 85, üçüncü turda 90 verir. 5. derste olduğu gibi iki nokta ve girinti burada da kural.

for sadece listeyle değil, metinle de çalışır. Bir metni harf harf gezer:

for harf in "Python":
print(harf, end=" ")
# P y t h o n

range: sayı üretmek

Bazen elinde bir liste olmaz; sadece “bunu 5 kez yap” demek istersin. range bunun için sayı üretir:

for i in range(5):
print(i, end=" ")
# 0 1 2 3 4

Dikkat: range(5) 0’dan başlar ve 5’i dahil etmez. 0, 1, 2, 3, 4 toplam beş sayı eder. Farklı bir aralık istersen başlangıç ve bitiş verebilirsin:

YazımÜrettiği sayılar
range(5)0, 1, 2, 3, 4
range(1, 6)1, 2, 3, 4, 5
range(0, 10, 2)0, 2, 4, 6, 8 (ikişer ikişer)

Bir çarpım tablosu yazdırmak artık üç satır:

for i in range(1, 11):
print(f"7 x {i} = {7 * i}")
# 7 x 1 = 7
# 7 x 2 = 14
# ...
# 7 x 10 = 70

Biriktirmek: döngüde toplam almak

Döngülerin en sık kullanımı, bir değeri tur tur biriktirmek. Döngüden önce boş bir “kumbara” açarsın, her turda içine ekler, sonunda toplamı alırsın:

notlar = [70, 85, 90]
toplam = 0 # kumbara boş başlar
for n in notlar:
toplam += n # toplam = toplam + n demek
print("Toplam:", toplam) # 245
print("Ortalama:", toplam / len(notlar)) # 81.666...

toplam += n yazımı, 3. dersteki puan = puan + 5 satırının kısa hâli. len(notlar) listede kaç değer olduğunu verir.

while: koşul doğru olduğu sürece

sayac = 3
while sayac > 0:
print(sayac)
sayac -= 1 # her turda bir azalt
print("Kalkış!")
# 3
# 2
# 1
# Kalkış!

while her turdan önce koşula bakar: sayac > 0 doğru mu? Doğruysa içerideki satırları çalıştırır, sonra tekrar bakar. Koşul yanlış olduğu an döngüden çıkar.

while‘ın içinde koşulu bir gün yanlış yapacak bir şey olmalı. Burada bu işi sayac -= 1 yapıyor. O satırı unutursan sayac hep 3 kalır ve döngü hiç bitmez.

break ve continue: döngüyü yönlendirmek

  • break: Döngüyü o anda tamamen bitirir.
  • continue: O turun geri kalanını atlayıp bir sonraki tura geçer.
notlar = [70, 85, 40, 90]
# İlk kalanı bulunca dur
for n in notlar:
if n < 50:
print("Kalan var:", n)
break
# Kalan var: 40
# Kalanları atla, geçenleri yaz
for n in notlar:
if n < 50:
continue
print("Geçti:", n)
# Geçti: 70
# Geçti: 85
# Geçti: 90

Mini program: istediğin kadar not

Şimdi baştaki soruya dönelim. Program önce kaç not girileceğini sorsun, sonra o kadar notu döngüyle alsın:

adet = int(input("Kaç not gireceksin? "))
toplam = 0
for i in range(1, adet + 1):
not_ = float(input(f"{i}. not: "))
toplam += not_
ortalama = toplam / adet
print(f"Ortalaman: {ortalama:.1f}")
if ortalama >= 50:
print("Geçtin!")
else:
print("Kaldın.")

Örnek çalışma:

Kaç not gireceksin? 3
1. not: 70
2. not: 85
3. not: 90
Ortalaman: 81.7
Geçtin!

Üç not da girsen otuz not da girsen kod aynı. 4. dersin input‘u, 5. dersin if‘i ve bu dersin döngüsü artık birlikte çalışıyor. Değişkene not_ dedik, çünkü not Python’da özel bir kelime (5. derste gördüğümüz not), değişken adı olarak kullanılamıyor.

Sık karşılaşılan hatalar

Bitmeyen döngü. while içindeki koşulu değiştirmeyi unutursan döngü sonsuza kadar döner. Colab’da hücrenin solundaki dönen simge durmaz; durdurmak için o simgeye tekrar tıkla ya da üst menüden Çalışma zamanı > Yürütmeyi durdur‘u seç.

range’in son sayıyı dahil etmediğini unutmak. 1’den 10’a kadar saymak için range(1, 10) yazarsan 10 gelmez. Doğrusu range(1, 11).

Kumbarayı döngünün içinde açmak. toplam = 0 satırını döngünün içine koyarsan her turda sıfırlanır ve sonunda sadece son değeri görürsün. Biriktirme değişkeni her zaman döngüden önce tanımlanır.

Bu derste öğrendiklerin

  • for bir listeyi, metni ya da range‘in ürettiği sayıları tek tek gezer.
  • range(baş, son) başı dahil eder, sonu dahil etmez.
  • Biriktirme: döngüden önce toplam = 0, içinde toplam += değer.
  • while koşul doğru olduğu sürece döner; koşulu bir gün yanlış yapacak satırı unutma.
  • break döngüyü bitirir, continue o turu atlar.

Alıştırmalar

  1. 1’den 100’e kadar olan sayıların toplamını döngüyle hesapla.
  2. Kullanıcıdan bir sayı al ve o sayının çarpım tablosunu (1’den 10’a kadar) yazdır.
  3. 1’den 20’ye kadar olan sayılardan sadece çift olanları yazdır. İki farklı yolla dene: continue ile ve range‘in adım değeriyle.
  4. Sayı tahmin oyunu: program 7 sayısını tutsun. Kullanıcı bilene kadar tahmin istesin, her yanlış tahminde “Daha büyük” ya da “Daha küçük” desin. Bilince kaç denemede bildiğini yazsın. İpucu: while True: ve break.

Cevaplar

  1. toplam = 0, for i in range(1, 101): toplam += i, print(toplam) sonucu 5050.
  2. sayi = int(input("Bir sayı: ")), sonra for i in range(1, 11): print(f"{sayi} x {i} = {sayi * i}").
  3. for i in range(1, 21): içinde if i % 2 != 0: continue ve print(i). Ya da tek satırla for i in range(2, 21, 2): print(i).
  4. gizli = 7, deneme = 0, sonra while True: içinde tahmin = int(input("Tahminin: ")), deneme += 1; if tahmin == gizli: ise print(f"Bildin! {deneme} denemede.") ve break; elif tahmin < gizli: ise “Daha büyük”, else: ise “Daha küçük”. while True kendi kendine hiç bitmez; döngüden çıkmanın tek yolu break.

Sıradaki ders

Bu derste listeleri “birden fazla değeri tutan kutu” diye geçtik. Bir sonraki derste listeleri ayrıntılı öğreneceğiz: eleman eklemek, silmek, sıralamak ve listenin belirli bir parçasını almak.


Hatice Özbolat | Teknoloji ve AI Rehberi sitesinden daha fazla şey keşfedin

Son gönderilerin e-postanıza gönderilmesi için abone olun.

Comments

Bir yanıt yazın