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/elseile karar yapısı kurabilmeli,forvewhiledö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:
- Döngüyü başlatan durum nedir?
- Her turda hangi durum değişiyor?
- 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 usernameAlış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.
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
range(1, 5)hangi sayıları üretir?for ch in textyapısındachneyi temsil eder?- String neden “değiştirilemez” kabul edilir?
whiledöngüsünde sonsuz döngüyü önlemek için hangi durum değişmelidir?elifne zaman gereklidir?
Bu haftadan akılda kalması gerekenler
if,forvewhilekavramları 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.