Python'da Kontrol Yapıları ve Fonksiyonlar

Bu derste ne yapacağız?

Bir önceki derste Python'da değişkenler ve temel veri tipleriyle (sayılar, metinler, mantıksal değerler) tanıştınız; bir değişkene değer atamayı ve bu değeri ekrana yazdırmayı öğrenmiştiniz. Bu derste bilgisayara "eğer şu doğruysa şunu yap, değilse başka bir şey yap" dedirtmeyi ve aynı işlemi defalarca tekrar ettirmeyi öğreneceksiniz. Ardından kendi yazdığınız kod parçalarını tekrar tekrar çağırabileceğiniz küçük araçlara, yani fonksiyonlara dönüştürmeyi keşfedeceksiniz. Bu ders sonunda veri üzerinde otomatik ve tekrarlanabilir işlemler kurabilecek; ilerleyen derslerde göreceğiniz liste ve sözlük gibi veri yapılarını gezip işlemek için gereken temel mantığa sahip olacaksınız.

Ön koşul: Python'da değişken tanımlama, temel veri tipleri (sayı, metin, mantıksal değer) ve bir Python ortamında (örneğin Jupyter Notebook) kod çalıştırabiliyor olmak yeterlidir. Herhangi bir önceki programlama deneyimine ihtiyaç yoktur.

Kavram

Günlük hayatta sürekli koşullu kararlar veririz: "Eğer hava yağmurluysa şemsiye alırım, değilse almam." İşte Python'daki if-else yapısı tam olarak budur; programa bir koşul sorar, koşul doğruysa bir işlem yaptırır, yanlışsa başka bir işlem yaptırır. Koşul, sonucu Doğru (True) veya Yanlış (False) olan bir karşılaştırmadır; örneğin "yaş 18'den büyük mü?" gibi.

Döngüler ise tekrar eden işleri otomatikleştirir. Elli tane bulaşığı tek tek yıkayacağınızı düşünün: her seferinde "bulaşığı al, yıka, kurutmaya bırak" adımlarını tekrarlarsınız, sadece bulaşık değişir. Python'da bu tekrara for döngüsü ya da while döngüsü denir. for döngüsü elinizdeki bir grubun (örneğin bir sayı listesinin) her elemanı için aynı işlemi tek tek uygular; while döngüsü ise belirli bir koşul doğru olduğu sürece işlemi tekrarlar, tıpkı "cüzdanımda para kaldığı sürece market alışverişine devam et" demek gibi.

Fonksiyonlar ise sürekli kullanacağınız bir tarifi tek bir yere yazıp ona bir isim vermeniz gibidir. Her seferinde "iki sayıyı topla ve sonucu göster" işlemini elle yeniden yazmak yerine, bu işlemi bir kere tanımlar, sonra istediğiniz kadar çağırırsınız. Bu hem zaman kazandırır hem de kopyala-yapıştır hatalarını azaltır. Veri analizinde aynı temizleme veya hesaplama adımını yüzlerce satır üzerinde uygulamak gerektiğinde fonksiyonlar vazgeçilmez hale gelir.

Adım adım uygulama

1. Adım — Ortamınızı açın: Bir önceki derste kullandığınız Jupyter Notebook ya da başka bir Python ortamını açın ve yeni bir hücre oluşturun. Not: Arayüz, kullandığınız Python dağıtımına ve sürümüne göre değişebilir; menü adları farklı görünebilir.

2. Adım — Basit bir if-else yazın: Aşağıdaki kodu tek bir hücreye yazıp çalıştırın:

yas = 20
if yas >= 18:
print("Reşitsiniz")
else:
print("Reşit değilsiniz")

İlk satır yas adlı değişkene 20 değerini atar. İkinci satırda if yas >= 18: ifadesi "yas değişkeni 18'den büyük veya eşit mi?" diye sorar; ifadenin sonundaki iki nokta üst üste zorunludur. Doğruysa altındaki girintili satır çalışır ve "Reşitsiniz" yazdırılır; yanlış olsaydı else: altındaki satır çalışırdı. Python'da girinti (dört boşluk) kod bloklarını belirler; girintiyi kaçırmak hataya yol açar.

3. Adım — for döngüsüyle tekrar edin: Yeni bir hücrede şunu deneyin:

sayilar = [3, 7, 12, 5]
for sayi in sayilar:
print(sayi * 2)

Burada sayilar dört sayıdan oluşan bir liste. for sayi in sayilar: satırı listenin her elemanını sırayla sayi adlı geçici bir değişkene atar ve altındaki satırı o eleman için bir kez çalıştırır. Sonuç olarak dört sayının iki katı ekrana ayrı ayrı yazdırılır; toplamda dört satır çıktı görürsünüz.

4. Adım — while döngüsünü deneyin:

sayac = 1
while sayac <= 5:
print("Sayaç:", sayac)
sayac = sayac + 1

sayac değişkeni önce 1 olarak başlar. while sayac <= 5: koşulu doğru olduğu sürece döngü içindeki satırlar çalışır; her turda sayaç bir artırılır. Sayaç 6 olduğunda koşul yanlış hâle gelir ve döngü durur. Sayaç artırma satırını unutursanız döngü hiç durmaz; buna sonsuz döngü denir ve programı kilitleyebilir.

5. Adım — Kendi fonksiyonunuzu tanımlayın:

def kareal(sayi):
return sayi * sayi

def anahtar kelimesi "bir fonksiyon tanımlıyorum" demektir; kareal fonksiyonun adı, parantez içindeki sayi ise fonksiyona dışarıdan verilecek parametredir. return satırı fonksiyonun hesapladığı sonucu geri döndürür. Bu tanım tek başına hiçbir şey yazdırmaz; sadece tarifi kaydeder.

6. Adım — Fonksiyonu çağırın:

sonuc = kareal(6)
print(sonuc)

Burada fonksiyonu kareal(6) şeklinde çağırırsınız; 6 değeri fonksiyon içindeki sayi parametresine gider, fonksiyon 36 sonucunu döndürür ve bu sonuç sonuc değişkenine atanır. Son satır bu değeri ekrana yazdırır. Aynı fonksiyonu farklı sayılarla defalarca çağırabilirsiniz; kodu tekrar yazmanız gerekmez.

7. Adım — Koşul, döngü ve fonksiyonu birleştirin: Küçük bir alıştırma olarak, listedeki her sayı için çift mi tek mi olduğunu söyleyen bir yapı kurabilirsiniz: bir for döngüsüyle listeyi gezin, döngü içinde bir if-else ile sayının 2'ye bölümünden kalanı (sayi % 2 == 0) kontrol edin ve sonucu print ile yazdırın. Bu üç yapının birlikte kullanılması, ileride veri kümeleri üzerinde yapacağınız gerçek analizlerin temelini oluşturur.

Sık karşılaşılan sorunlar

Hata / BelirtiOlası NedenÇözüm
IndentationError (girinti hatası)if, for, while veya def satırından sonraki blok girintili yazılmamış ya da girintiler tutarsız (bazı satırda boşluk, bazısında sekme)Blok içindeki tüm satırları aynı miktarda boşlukla (genelde dört boşluk) girintileyin; sekme ve boşluğu karıştırmayın
Kod satırı sonunda "SyntaxError: expected ':'"if, for, while veya def satırının sonuna iki nokta üst üste konulmamışBu tür satırların mutlaka iki nokta üst üste (:) ile bitmesi gerektiğini kontrol edin
Döngü hiç durmuyor, not book "çalışıyor" görünüyorwhile döngüsünde koşulu değiştiren satır eksik veya yanlış yazılmış (sonsuz döngü)Döngü içinde sayaç veya koşulu etkileyen değişkenin her turda güncellendiğinden emin olun; gerekirse hücreyi durdurup kodu düzeltin
"NameError: name ... is not defined" fonksiyon çağrılırkenFonksiyon tanımlandığı hücre henüz çalıştırılmadan çağrılmaya çalışılmışÖnce def ile başlayan tanım hücresini çalıştırın, sonra fonksiyonu çağıran hücreyi çalıştırın
Fonksiyon çıktısı görünmüyorFonksiyon içinde return kullanılmış ama sonucu print etmeden sadece çağrılmışFonksiyonun döndürdüğü değeri bir değişkene atayıp print ile yazdırın veya doğrudan print(fonksiyonadı(...)) yazın

Mini görev

Aşağıdaki küçük görevi kendi ortamınızda tek başınıza tamamlamaya çalışın:

  • notlar adında [55, 78, 90, 40, 65] değerlerinden oluşan bir liste oluşturun.
  • Bir for döngüsüyle listedeki her notu tek tek gezin.
  • Döngü içinde bir if-else yapısıyla notun 50'den büyük veya eşit olup olmadığını kontrol edin; büyükse "Geçti", değilse "Kaldı" yazdırın.
  • gecti_mi adında, bir notu parametre olarak alan ve notun 50'den büyük veya eşit olup olmadığına göre True veya False döndüren bir fonksiyon yazın.
  • Bu fonksiyonu listeden birkaç farklı notla çağırıp sonuçları print ile ekrana yazdırın.

Kontrol listesi: Kodunuz hatasız çalışıyor mu? Girintiler doğru mu? Fonksiyon return ile bir değer döndürüyor mu? For döngüsü listedeki tüm elemanları gezdi mi? Sonuçlar beklediğiniz gibi (geçti/kaldı, True/False) görünüyor mu?

Kendini sına

  • 1) Python'da bir if bloğunun hangi satırlara ait olduğunu ne belirler?
  • 2) for döngüsü ile while döngüsü arasındaki temel fark nedir?
  • 3) Bir fonksiyon tanımlarken hangi anahtar kelime kullanılır ve fonksiyonun sonucu geri döndürmek için hangi ifade kullanılır?
  • 4) Bir while döngüsünün sonsuz döngüye dönüşmesine genellikle ne sebep olur?
  • 5) Aynı hesaplamayı kod içinde birçok kez tekrar tekrar yazmak yerine fonksiyon kullanmanın avantajı nedir?

Cevaplar

  • 1) Girinti (satır başındaki boşluk miktarı) belirler; aynı girinti seviyesindeki satırlar aynı bloğa aittir.
  • 2) for döngüsü belirli bir grubun (örneğin bir listenin) her elemanı için bir kez çalışır ve eleman sayısı kadar tekrarlanır; while döngüsü ise belirtilen koşul doğru olduğu sürece, eleman sayısına bakmaksızın tekrarlanır.
  • 3) Fonksiyon tanımlamak için def anahtar kelimesi, sonucu geri döndürmek için ise return ifadesi kullanılır.
  • 4) Döngü koşulunu etkileyen değişkenin döngü içinde güncellenmemesi veya güncellemenin koşulu hiçbir zaman yanlış yapmaması sonsuz döngüye yol açar.
  • 5) Kod tekrarını azaltır, hata yapma ihtimalini düşürür ve bir değişiklik gerektiğinde sadece fonksiyonun tanımını güncellemek yeterli olur; tüm kullanım yerlerini tek tek değiştirmeye gerek kalmaz.

Bu dersi kayıt olmadan izleyebilirsin. İlerlemeni kaydetmek, sertifika almak ve puan tablosuna girmek için ücretsiz üye ol: Kayıt Ol