? Okuma Hesaplanıyor... Okuma: %0
0

Bir Program Nasıl "Düşünür"? (Python 3.Ders)

Resim
BÖLÜM 3 — Kararın Doğuşu: Bir Program Nasıl "Düşünür"?
Bu bölümün temel sorusu: Şimdiye kadar yazdığımız her kod, yukarıdan aşağıya, hiç sapmadan çalıştı. Peki ya program bir duruma göre farklı davranması gerekiyorsa? Bir bilgisayar nasıl "karar verir"?

🎯 Bölümün Öğrenme Hedefleri
Bu bölümün sonunda öğrenci;
  • bir programın neden dallanmaya (branching) ihtiyaç duyduğunu,
  • "==" işareti ile "=" işaretinin neden birbirinden tamamen farklı olduğunu,
  • "if / elif / else" yapısının nasıl bir karar ağacı oluşturduğunu,
  • karşılaştırma ve mantıksal operatörlerin ("and", "or", "not") nasıl birlikte çalıştığını,
  • girintilemenin (indentation) Python'da neden süslü parantez yerine geçtiğini,
  • iç içe koşulların ne zaman gerekli olduğunu
açıklayabilecek duruma gelecektir.


📌 Geçen Dersde Neler Öğrendik?
2.derste değişkenleri, "=" işaretinin bir atama olduğunu, veri tiplerini ve tip dönüşümünü öğrendik. Ama şu ana kadar yazdığımız her program tek bir yol izledi ve hiçbir satır "atlanmadı", hiçbir seçim yapılmadı. Bu bölümde programın ilk kez seçim yapmasını sağlıyoruz.


3.1. Her Şey Bir Sorunla Başladı
Gerçek hayatta hemen her kararımız bir koşula bağlıdır: "Yağmur yağıyorsa şemsiye al", "yaşın 18'den büyükse oy kullanabilirsin", "bakiyen yeterliyse para çek". Bu cümlelerin ortak bir yapısı vardır: Eğer bir şey doğruysa -bir koşul var-, şunu yap; değilse başka bir şey yap. Şimdiye kadar yazdığımız Python kodu bu tür bir esneklikten yoksundu:
Kod:
yas = 15
print("Oy kullanabilirsin")
Bu kod, "yas" kaç olursa olsun aynı mesajı basar. Kişi, 15 yaşında da 45 yaşında da olsa ekrana "Oy kullanabilirsin" yazacak. Oysa istediğimiz şey, yaşa bağlı olarak farklı bir sonuç almaktır. İşte tam olarak bu ihtiyaçtan  koşullu ifadeler  doğar.

Resim
3.2. Büyük Fikir: Yol Ayrımları
Bir programı artık düz bir çizgi değil, yol ayrımları olan bir patika gibi düşünebiliriz. Program bir noktaya gelir, bir soruya bakar ("bu doğru mu?") ve cevaba göre iki (ya da daha fazla) yoldan birini seçer.
Kod:
yas = 20
if yas >= 18:
    print("Oy kullanabilirsin")
else:
    print("Henüz oy kullanamazsın")
#if(eğer) yaş 18'e eşit veya bundan büyük ise ekrana "Oy kullanabilirsin" yaz else(değilse) (yani 18'den küçük ise) ekrana "Henüz oy kullanamazsın" yaz.#

Burada Python şunu yapar:
  • "yas >= 18" ifadesini kontrol eder, bu ifade "True" ya da "False" değerine dönüşür
  • "True" ise "if" bloğunun altındaki kodu çalıştırır
  • "False" ise "else" bloğunun altındaki kodu çalıştırır


3.3. "==" ile "=" Neden Farklı? (2.Dersteki En Kritik Ayrımın Devamı)
2.derste "=" işaretinin bir atama olduğunu, matematikteki eşitlik olmadığını öğrenmiştik. Şimdi Python'un gerçek eşitlik sorgusu için kullandığı işaretle tanışıyoruz: "=="

Kod:
yas = 20        # atama: yas ismine 20 değerini bağla
print(yas == 18)  # sorgu: yas, 18'e eşit mi? -> False
print(yas == 20)  # sorgu: yas, 20'ye eşit mi? -> True

DİKKAT
⚠️ En Sık Yapılan Hata: Yeni başlayanların neredeyse tamamı bir noktada şunu yazar:
Kod:
if yas = 18:   # HATA! Python burada "==" bekliyor

Python bu satırı görünce hata verir, çünkü "if" bir sorgu bekler (doğru mu yanlış mı?), bir atama değil. Bu, "=" ile "==" nin birbirinden bu kadar net ayrılmasının tam da nedenidir, biri "yap" der, diğeri "kontrol et" der.


3.4. Karşılaştırma Operatörleri: Sorunun Kendisi
Kod:
print(5 > 3)    # True
print(5 < 3)    # False
print(5 == 5)   # True
print(5 != 3)   # True  (eşit değil mi?)
print(5 >= 5)   # True  (büyük veya eşit mi?)
print(5 <= 3)   # False (küçük veya eşit mi?)
Bu operatörlerin hepsi aslında Python'a bir soru sorar ve cevap her zaman "True" ya da "False" olur yani ikinci derste öğrendiğimiz "bool" tipi burada devreye girer. Koşullu ifadeler ile bool tipi bu yüzden ayrılmaz bir ikilidir.


3.5. "elif": Birden Fazla Yol Ayrımı
Peki seçenek ikiden fazlaysa? İşte "elif" (else if'in kısaltması) burada devreye girer:

Kod:
not_ort = 65

if not_ort >= 85:
    print("Notun: AA")
elif not_ort >= 70:
    print("Notun: BA")
elif not_ort >= 50:
    print("Notun: CB")
else:
    print("Notun: FF")

DERSTE
💡 Büyük Fikir: Python bu koşulları yukarıdan aşağıya, sırayla kontrol eder ve ilk doğru bulduğu yerde durur, geri kalanlara hiç bakmaz. `not_ort = 65` olduğunda:
- İlk önce "65 >= 85" sorulur → False, devam et
- Sonra "65 >= 70" sorulur → False, devam et
- Sonra "65 >= 50" sorulur → True! Dur, "Notun: CB" yazdır
Bu sıralamanın önemi büyük eğer koşulları ters sıralasaydık (">= 50" en üstte olsaydı), 90 alan biri bile ilk koşulda "CB" alırdı, çünkü Python daha ileriye bakmayacaktı.

3.6. Mantıksal Operatörler: Birden Fazla Koşulu Birleştirmek
Bazen tek bir koşul yetmez, birkaç koşulun aynı anda ya da en az birinin doğru olmasını isteriz:

Kod:
yas = 25
ehliyet_var = True

if yas >= 18 and ehliyet_var:
    print("Araç kullanabilirsin")
else:
    print("Araç kullanamazsın")

 Üç temel mantıksal operatör vardır: 
- and: iki koşul da doğru olmalı → "True and True" = "True", diğer her kombinasyon "False"
- or: koşullardan en az biri doğru olmalı → "True or False" = "True", sadece ikisi de "False" ise sonuç "False"
- not: bir koşulun tersini alır → "not True" = "False"

Kod:
print(True and False)   # False
print(True or False)    # True
print(not True)          # False

BİLGİ
🤔 Neden Bu Üç Operatöre İhtiyaç Var?Çünkü gerçek hayattaki kararlar nadiren tek bir şarta bağlıdır. "18 yaşından büyük ve ehliyeti varsa araç kullanabilir" cümlesi, iki koşulun birlikte doğru olmasını gerektirir tek bir karşılaştırma operatörüyle bunu ifade edemeyiz.

3.7. Girintileme (Indentation): Python'un Süslü Parantez Yerine Kullandığı Şey
Diğer birçok dilde (C, Java gibi) hangi kodun hangi koşula ait olduğunu süslü parantezler "{ }" belirler. Python bu yaklaşımı bilinçli olarak reddetti ve bunun yerine  girintilemeyi (satır başındaki boşlukları)  kullanır:

Kod:
if yas >= 18:
    print("Bu satır if bloğuna ait")
    print("Bu satır da öyle")
print("Bu satır artık if bloğunun dışında")

BİLGİ
🤔 Neden Böyle Tasarlanmış: Guido van Rossum'un birinci derste bahsettiğimiz felsefesini hatırlayın, "kod, okunabilir olmalı". Süslü parantezli dillerde bile programcılar genelde kodu okunaklı tutmak için zaten girintileme yaparlar. Python bunu bir alışkanlık olmaktan çıkarıp zorunlu bir kural hâline getirdi. Böylece kodun görünüşü ile kodun gerçek yapısı birbirinden asla ayrışamaz.

⚠️ DikkatGirintileme tutarsızsa Python hata verir:
Kod:
if yas >= 18:
    print("Doğru")
   print("Hata! Bu satırın girintisi tutarsız")


3.8. İç İçe Koşullar (Nested Conditionals)
Bazen bir koşulun içinde başka bir koşula ihtiyaç duyarız:
Kod:
yas = 20
bilet_var = True

if yas >= 18:
    if bilet_var:
        print("İçeri girebilirsin")
    else:
        print("Bilet almalısın")
else:
    print("Yaşın yetmiyor")

Burada dış "if" önce yaşı kontrol eder, sadece o doğruysa iç "if" e bakılır. Bu, tıpkı bir güvenlik kontrolünden geçip sonra ikinci bir kontrolden geçmek gibidir önceki kapı kapalıysa, ikinci kapıya hiç bakılmaz.

🤔 Peki Ne Zaman İç İçe Koşul, Ne Zaman "and" ?
Bu iki kod parçası aslında aynı sonucu verir:
Kod:
if yas >= 18 and bilet_var:
    print("İçeri girebilirsin")
Genel kural: koşullar birbirinden bağımsız değerlendirilecekse (yani her biri için farklı bir "else` mesajı gerekiyorsa) iç içe yapı daha nettir. Koşullar sadece "ikisi de doğru mu" diye tek bir soru soruyorsa "and" daha sade ve tercih edilir.


⚠️ Kavram Yanılgıları
❌ Yanlış düşünce: " 'elif' bloklarının hepsi kontrol edilir, hangileri doğruysa hepsi çalışır."
✅ Daha doğru düşünce: Python, "if / elif / else" zincirinde ilk doğru bulduğu koşulun bloğunu çalıştırır ve zincirin geri kalanına hiç bakmaz. Birden fazla koşulun bağımsız olarak kontrol edilmesini istiyorsan, ayrı "if" blokları yazman gerekir.

❌ Yanlış düşünce: "Girintileme sadece görsel bir tercih, boşluk sayısı önemli değil."
✅ Daha doğru düşünce: Python'da girintileme, kodun hangi bloğa ait olduğunu belirleyen yapısal bir kuraldır süs değildir. Aynı blok içindeki satırların girinti miktarı tutarlı olmalıdır, aksi hâlde program hata verir.


👨‍🏫 Öğretmen Notu
Koşullu ifadeler anlatılırken doğrudan "if/elif/else" sözdizimine geçilmesi, öğrencinin "neden bu yapıya ihtiyacım var" sorusunu atlamasına yol açar. Önerilen sıra:
  1. Önce günlük hayattan bir "eğer... ise..." örneği verilir (yağmur/şemsiye gibi).
  2. Şimdiye kadarki kodun neden hep aynı sonucu verdiği (dallanma olmadığı) fark ettirilir.
  3. "==" işareti, ikinci dersteki "=" ile doğrudan karşılaştırılarak verilir bu ayrım atlanırsa öğrenci ileride ciddi hatalar yapar.
  4. "if/else" ikili yapıyla başlanır, sonra "elif" ile çoklu dallanmaya geçilir.
  5. "and/or/not" ancak tek koşulun yetmediği somut bir örnekle (yaş + ehliyet gibi) tanıtılır.


✍️ Uygulama Soruları
Soru 1: Bir sayının pozitif, negatif ya da sıfır olduğunu yazdıran kodu yaz (sayıyı siz seçin).

Soru 2: Aşağıdaki kod neden hata verir?
Kod:
yas = 20
if yas = 20:
    print("Yirmi yaşındasın")

Soru 3: Bir kullanıcının hem 18 yaşından büyük hem de bir üyelik kodu girmiş olması gerektiğini kontrol eden kodu yaz.

Soru 4: Aşağıdaki kodun çıktısı ne olur, neden?
Kod:
puan = 90

if puan >= 50:
    print("Geçtin")
elif puan >= 80:
    print("Yüksek başarı")
else:
    print("Kaldın")

Soru 5: İç içe koşul ile `and` kullanarak yazılmış iki kod ne zaman birbirinin yerine geçebilir?


📌 Şu Ana Kadar Neler Öğrendik?
  • Programların neden dallanmaya (branching) ihtiyaç duyduğu
  • "if / elif / else" yapısının nasıl bir karar ağacı oluşturduğu
  • "==" işaretinin "=" den (atama) tamamen farklı olduğu, eşitlik sorguladığı
  • Karşılaştırma operatörleri ("> < == != >= <=")
  • Mantıksal operatörler (`and`, `or`, `not`) ve birden fazla koşulu birleştirme
  • Girintilemenin Python'da süslü parantez yerine geçen zorunlu bir kural olduğu
  • İç içe koşulların ne zaman gerekli, ne zaman gereksiz olduğu


📌 Bu Bölümden Çıkarılacak En Önemli Sonuç
Koşullu ifadeler bir formülle başlamadı, gerçek hayattaki "eğer... ise..." kararlarını bilgisayara aktarma ihtiyacından doğdu. Python bu ihtiyacı "if / elif / else" ile karşılar ve her koşulu sırayla, ilk doğru bulduğunda durarak değerlendirir. Bu yapı, bir programı düz bir çizgiden çıkarıp gerçek anlamda "karar veren" bir sisteme dönüştürür.


📝 Bölümün Kısa Özeti
Koşullu ifadeler, bir programın duruma göre farklı davranmasını sağlar. "if" bir koşulu kontrol eder, doğruysa altındaki bloğu çalıştırır; "elif" ek koşullar eklemeyi, "else" hiçbir koşul sağlanmadığında ne yapılacağını belirler. Python koşulları sırayla kontrol eder ve ilk doğru bulduğunda durur. "==" eşitlik sorgular, "=" ile karıştırılmamalıdır. "and", "or", "not" operatörleri birden fazla koşulu birleştirmeyi sağlar. Python, hangi kodun hangi bloğa ait olduğunu süslü parantez yerine girintilemeyle belirler.

✍️ Uygulamanın Cevapları
cevap 1: Ben -5 sayısına göre yazdım.
Kod:
python
sayi = -5

if sayi > 0:
    print("Pozitif")
elif sayi < 0:
    print("Negatif")
else:
    print("Sıfır")

cevap 2:"if" bir eşitlik sorgusu ("==") bekler, atama ("=") değil. Doğrusu: "if yas == 20:"

cevap 3:
Kod:
yas = 22
uyelik_kodu_var = True

if yas >= 18 and uyelik_kodu_var:
    print("Üyeliğin onaylandı")
else:
    print("Koşulları sağlamıyorsun")

cevap 4: "Geçtin" yazdırılır. Çünkü Python koşulları sırayla kontrol eder ve ilk doğru bulduğu koşulda durur "puan >= 50" zaten "True" olduğu için, aslında daha yüksek bir başarıyı belirten "puan >= 80" koşuluna hiç bakılmaz. Bu kod, koşulların sıralamasının neden önemli olduğunu gösteren tipik bir hatadır.

cevap 5: Koşullar tek bir soru soruyorsa ("ikisi de doğru mu?") ve her koşul için ayrı bir "else" mesajına ihtiyaç yoksa, "and" kullanmak daha sade olur. Her koşul için bağımsız bir sonuç/mesaj gerekiyorsa, iç içe "if" yapısı daha nettir.

Konuyu Dinle
Hazır. Konuyu dinlemek için Oynat'a basın.

Yazarımız Hasan hakkında: Adım Hasan, ama bir dönem MyBB kullananlar beni Yondaime nicki ile tanırdı. 2009 da başladı web maceram, MyBB, Wordpress, Matematik, Adalet, Bilgisayar Programcılığı, derken şimdide burada bir şeyler yapmaya çalışıyorum :)

user avatar


 

Yazıya herhangi bir yorum yapılmadı

[-]
Hızlı Cevap
Güvenlik Kodu:
Lütfen, resmin üzerindeki harf ve rakamlardan oluşan Güvenlik Kodunu, aşağıdaki metin kutusuna giriniz.
Güvenlik Kodu:
(Büyük/Küçük harf duyarsız)


 
Reklam
Reklam


Kategoriler


Yasal Uyarı
Bu internet sitesi içeriğinde yer alan tüm yazılar Gidenler.Me’ye ait olup, 5846 sayılı Fikir ve Sanat Eserleri Kanunu ve 5237 sayılı Türk Ceza Kanunu kapsamında korunmaktadır. Bu hakları ihlal eden kişiler, 5846 sayılı Fikir ve Sanat eserleri Kanunu ve 5237 sayılı Türk Ceza Kanununda yer alan hukuki ve cezai yaptırımlara tabi olurlar. Gidenler.Me, ilgili yasal işlem başlatma hakkına sahiptir. Gidenler.Me Blog'da yer alan tüm yazılar/makaleler bilgi edinme amacı ile sınırlı olup Gidenler.Me'den izin alınmaksızın değiştirilemez, çoğaltılamaz, yayımlanamaz, dağıtılamaz, umuma iletilemez, başka bir lisana çevrilemez.


Türkçe Çeviri: MyBB, Yazılım: MyBB, © 2002-2026 MyBB Group.
GM v3.0.0.8 Beta theme designed for MyBB