Koşullar, döngüler ve string işlemleri

Bu hafta daha önce C’de kullandığınız karar ve tekrar yapılarını Python’a taşıyoruz. Amaç if ve döngü kavramlarını yeniden öğretmek değil; Python’daki daha sade sözdizimini ve koleksiyon/string üzerinde doğrudan dolaşma biçimini öğrenmektir.

Bu hafta neleri yapabilmelisiniz?

  • if / elif / else ile karar yapısı kurabilmeli,
  • for ve while döngülerini uygun durumda kullanabilmeli,
  • range() davranışını açıklayabilmeli,
  • bir string üzerinde doğrudan dolaşabilmeli,
  • temel string metotlarını kullanabilmeli,
  • kısa C döngülerini Python’a dönüştürebilmeli,
  • sınır ve off-by-one hatalarını fark edebilmelisiniz.

if: parantez ve süslü parantez yok

Python’da koşulun sonuna : gelir; blok girintiyle belirlenir. else if yerine elif kullanılır.

Sınır değerini düşünün

score = 70 için sonuç ne olur? 69 için ne olur? Koşul zincirlerinde sınır değerlerini özellikle test etmek, görünüşte doğru kodun gizli hatalarını yakalar.

for: çoğu zaman sayaçtan daha fazlası

C’de bir string’i dolaşmak için indeks değişkeni kullanmaya alışmış olabilirsiniz. Python’da çoğu zaman elemana doğrudan erişebiliriz:

Bu kodda letter, her turda sıradaki karakteri alır. İndeks gerekmediği için ayrıca sayaç tutmuyoruz.

İndeks gerçekten gerekiyorsa range() kullanabiliriz:

range() son değeri içermez

range(5)0, 1, 2, 3, 4. Son sınırın dışarıda kalması, C’deki i < 5 kalıbına benzer.

while: koşula bağlı tekrar

Tekrar sayısı baştan belli değilse while daha doğal olabilir:

while kullanırken üç soruyu sorun:

  1. Döngüyü başlatan durum nedir?
  2. Her turda hangi durum değişiyor?
  3. Döngüyü bitirecek koşul gerçekten oluşabilir mi?

Bu üç sorudan biri belirsizse sonsuz döngü riski vardır.

String bir karakter dizisidir

Python stringleri üzerinde indeksleme, dilimleme ve çok sayıda hazır metot kullanılabilir:

String değiştirilemez (immutable). text.upper() mevcut string’i değiştirmez; yeni bir string üretir.

Bu “değiştirilebilir/değiştirilemez” ayrımı gelecek hafta listeler ve nesne referansları için önemli olacaktır.

Alıştırma — Koşulu tamamla

Bir kullanıcı adı en az 5 karakter olmalı ve boşluk içermemelidir.

len(username) >= 5 ile " " not in username ifadelerini and ile birleştirebilirsiniz.

valid = len(username) >= 5 and " " not in username

Alıştırma — Doğrudan dolaşarak sayma

Aşağıdaki kod bir metindeki a harflerini sayıyor. Önce sonucu tahmin edin.

Burada ayrıca bir indeks sayacı tutmuyoruz; karakterler üzerinde doğrudan dolaşıyoruz. Ardından kodu büyük/küçük harf duyarsız olacak şekilde değiştirin. Örneğin "Ankara" için hem A hem a sayılmalıdır.

Alıştırma — Off-by-one hatasını düzelt

Aşağıdaki program 1’den 10’a kadar sayıların toplamını üretmek istiyor; ancak sonuç eksik.

Neden 10 işlenmiyor? Yalnızca gerekli tek değeri değiştirerek düzeltin.

Alıştırma — while döngüsünü güvenli hâle getir

Bu kodu çalıştırın. Sonra break satırını kaldırırsanız ne olacağını çalıştırmadan önce açıklayın. Web sürümünde sonsuz döngüyü gerçekten çalıştırmak yerine mantığını tartışmak yeterlidir.

Küçük üretim görevi — Metin özeti

Bir metin için aşağıdaki bilgileri üreten bir program yazın:

  • toplam karakter sayısı,
  • boşluk sayısı,
  • sesli harf sayısı,
  • metnin başındaki ve sonundaki boşluklar strip() ile temizlendikten sonra ilk ve son karakter.

Örnek metni değişken olarak verin; input() zorunlu değildir. En az bir for, bir if ve bir string metodu kullanın.

Warning

Temizlenmiş metin boşsa text[0] veya text[-1] kullanmak IndexError üretir. Yalnızca boşluklardan oluşan bir metni de sınır durumu olarak düşünün ve ilk/son karaktere erişmeden önce bunu kontrol edin.

C’den Python’a düşünme farkı

Aşağıdaki iki yaklaşım aynı soruyu çözebilir:

# İndeks temelli
for i in range(len(text)):
    print(text[i])

# Değer temelli
for ch in text:
    print(ch)

İndekse ihtiyacınız yoksa ikinci yaklaşım daha doğrudan niyet ifade eder. Python öğrenirken temel hedeflerden biri, C sözdizimini Python harfleriyle yeniden yazmak değil, dilin sunduğu daha doğal ifade biçimlerini tanımaktır.

Kendinizi kontrol edin

  1. range(1, 5) hangi sayıları üretir?
  2. for ch in text yapısında ch neyi temsil eder?
  3. String neden “değiştirilemez” kabul edilir?
  4. while döngüsünde sonsuz döngüyü önlemek için hangi durum değişmelidir?
  5. elif ne zaman gereklidir?

Bu haftadan akılda kalması gerekenler

  • if, for ve while kavramları aynı; Python’daki ifade biçimi daha sadedir.
  • for, yalnızca sayı sayacı değildir; bir veri dizisinin elemanları üzerinde doğrudan dolaşabilir.
  • range() son sınırı içermez.
  • String immutable’dır; metotların çoğu yeni string üretir.
  • Sınır değerleri ve off-by-one hataları hâlâ önemlidir.

Gelecek hafta Python koleksiyonlarını kullanacak ve nesne tabanlı programlama için kritik olan referans ve değiştirilebilirlik fikrine yaklaşacağız.

Back to top