Ana Sayfa · Akademi · Robotik ve Kodlama · Python Temelleri · Proje: Ders Programı Kontrolü

Proje: Ders Programı Kontrolü

Sözlük ve listelerle ders programını tutup güne göre dersleri ve kitapları listeleyen bir program yaz.

PROJE PUSULASI

Bu sayfayı ne için kullanacaksın?

Ana fikir

Bir gün girdiğinde o günün derslerini ve gerekli kitapları listeleyen, sonra çantandaki eksikleri söyleyen küçük bir Python programı yazacağız.

Üretilecek kanıt

Programı kendi haline getirmen için üç görev: perşembe ve cuma günlerini derslerini de ders_programi sözlüğüne ekle. Yeni geçen dersler için kitaplar sözlüğüne de kitap ekle. Program sonunda toplam kaç kitap eksik olduğunu yazdır. İpucu: bir sayac = 0 değişkeni tut ve her eksikte sayac = sayac + 1 yap. Kullanıcı sözlükte olmayan bir gün girerse, hangi…

Kontrol tuzağı

Büyük/küçük harf tuzağı İlk denememde .lower() yazmayı unutmuştum. Kullanıcı Pazartesi yazdığında program "ders programı bulunamadı" dedi, çünkü sözlükteki anahtar küçük harfli pazartesi idi. Beklenen sonuç ile gerçek sonuç farklıydı; sorunu bulunca girdiye .lower() ekledim ve düzeldi. Sözlükte olmayan anahtarı…

Sonraki bağlantı

Proje: Basit Spor İstatistikleri

Modül kaynakları: Python Tutorial · Arduino Learn

SeviyeBaşlangıç
Yaş10–16
Süre45–75 dk
Ön koşulProje: Sayı Tahmin Oyunu
İçerikProje rehberi · 1.625 kelime
Son güncelleme

Bir cümlelik özet

Bir gün girdiğinde o günün derslerini ve gerekli kitapları listeleyen, sonra çantandaki eksikleri söyleyen küçük bir Python programı yazacağız.

Neden önemli?

Algoritma modülünde "akıllı çanta" fikrini konuşmuştuk: sabah çantanı kontrol etmek için açık adımlar yazmıştık. O zaman bu bir sözde koddu. Şimdi aynı fikri gerçek çalışan bir programa çevireceğiz.

Bu proje, öğrendiğimiz üç aracı bir arada kullanıyor: bilgiyi sözlük ve listede saklamak, kullanıcıdan girdi almak ve koşul ile döngü kurmak. Yani tek bir küçük programda modülün en önemli parçalarını birleştiriyoruz.

Ben bu programı yazarken küçük bir hatayla karşılaştım ve onu nasıl düzelttiğimi de aşağıda paylaşıyorum. Kod ilk denemede çalışmadı; önemli olan hatanın nerede olduğunu bulmaktı.

Ders programını nasıl saklarız?

Bir programda çok sayıda ilişkili bilgi tutmamız gerektiğinde sözlük (İngilizcesi *dictionary*) kullanırız. Sözlük, her bilgiyi bir anahtar ile eşleştirir. Gerçek bir sözlükte kelimeyi bulup karşısındaki anlamı okuruz; Python sözlüğünde de anahtarı verip karşısındaki değeri alırız.

Günleri ve dersleri eşleştirmek

Her günün karşısına o günün derslerini bir liste olarak yazalım. Liste, sıralı birden çok değeri köşeli parantez içinde tutar.

ders_programi = {
    "pazartesi": ["matematik", "türkçe", "fen"],
    "salı": ["ingilizce", "matematik", "müzik"],
    "çarşamba": ["fen", "sosyal", "türkçe"],
}

Burada anahtar bir gün adı, değer ise o günün dersleri. ders_programi["salı"] yazarsak Python bize ["ingilizce", "matematik", "müzik"] listesini verir. Sözlüğün güzelliği şu: bilgiyi sıraya göre değil, anlamına göre buluruz. "Salı günü hangi dersler var?" sorusunun cevabına doğrudan gün adıyla ulaşırız; listenin kaçıncı sırada olduğunu ezberlememize gerek kalmaz.

Her dersin kitabını eşleştirmek

İkinci bir sözlükte her dersin hangi kitaba ihtiyaç duyduğunu tutalım.

kitaplar = {
    "matematik": "Matematik kitabı",
    "türkçe": "Türkçe kitabı",
    "fen": "Fen kitabı",
    "ingilizce": "İngilizce kitabı",
    "müzik": "Müzik kitabı",
    "sosyal": "Sosyal Bilgiler kitabı",
}

Artık kitaplar["fen"] bize "Fen kitabı" değerini verir. İki sözlüğü birleştirince, bir günün derslerinden gerekli kitapların listesine ulaşabiliriz.

Kullanıcıdan gün alıp dersleri göstermek

Programın kullanıcıyla konuşan kısmına geçelim. Kullanıcıdan bir gün alacağız, o günü sözlükte arayacağız ve dersleri tek tek yazdıracağız.

Girdiyi güvenli hale getirmek

Kullanıcı "Pazartesi", "pazartesi" veya boşluklu " pazartesi" yazabilir. Bunların hepsini aynı kabul etmek için girdiyi küçük harfe çevirip baştaki-sondaki boşlukları temizleriz.

gun = input("Hangi günü kontrol edelim? ").lower().strip()

lower() tüm harfleri küçültür, strip() kenardaki boşlukları siler. Böylece kullanıcının nasıl yazdığından bağımsız aynı sonucu alırız.

Dersleri döngü ile yazdırmak

Şimdi o günün dersleri arasında dolaşacağız. Aynı işi her ders için tekrarladığımız için for döngüsü kullanırız. Python'da döngünün içindeki satırlar 4 boşluk girinti ile yazılır; girinti, o satırların döngüye ait olduğunu gösterir.

if gun in ders_programi:
    dersler = ders_programi[gun]
    print(gun.capitalize(), "günü dersleri:")
    for ders in dersler:
        print("-", ders, "->", kitaplar[ders])
else:
    print("Bu gün için ders programı bulunamadı.")

if gun in ders_programi satırı, girilen günün sözlükte olup olmadığını kontrol eder. Varsa dersleri listeleriz; yoksa kibar bir uyarı veririz. in anahtar kelimesi bu kontrolü çok kolaylaştırır.

Eksik kitap kontrolü

Projenin asıl amacı buydu: o gün gerekli kitaplardan hangileri çantada değil? Bunun için çantada bulunan kitapları bir listede tutalım, sonra her gerekli kitabı bu listede arayalım.

cantadaki_kitaplar = ["Matematik kitabı", "Fen kitabı"]

eksik_var = False
for ders in dersler:
    gerekli = kitaplar[ders]
    if gerekli not in cantadaki_kitaplar:
        print("EKSİK:", gerekli)
        eksik_var = True

if not eksik_var:
    print("Harika! Bütün kitaplar çantanda.")

not in ifadesi, "bu değer listede yok mu?" sorusunu sorar. eksik_var adında bir işaret değişkeni tutarız: döngü boyunca hiçbir eksik bulunmazsa değeri False kalır ve sonunda güzel bir mesaj basarız.

Tam programı birleştirmek

İki sözlüğü, girdiyi, döngüyü ve eksik kontrolünü tek dosyada topladığımızda program tamamlanır.

gun = input("Hangi günü kontrol edelim? ").lower().strip()

if gun in ders_programi:
    dersler = ders_programi[gun]
    print(gun.capitalize(), "günü dersleri:")
    for ders in dersler:
        print("-", ders, "->", kitaplar[ders])
    for ders in dersler:
        if kitaplar[ders] not in cantadaki_kitaplar:
            print("EKSİK:", kitaplar[ders])
else:
    print("Bu gün için ders programı bulunamadı.")

Programı test etmek

Kullanıcı pazartesi girerse ekranda şunu görürüz:

Pazartesi günü dersleri:
- matematik -> Matematik kitabı
- türkçe -> Türkçe kitabı
- fen -> Fen kitabı
EKSİK: Türkçe kitabı

Matematik ve Fen kitabı çantada olduğu için yalnız Türkçe kitabı eksik göründü. Program tam istediğimiz gibi çalışıyor. Farklı günler girip test etmek iyi bir alışkanlıktır: çarşamba girersen dersler ve eksik kitaplar değişir, cumartesi gibi tanımsız bir gün girersen "bulunamadı" mesajını görürsün. Her yeni girdi, kodun farklı bir yolunu denememizi sağlar.

Mini uygulama

Programı kendi haline getirmen için üç görev:

  1. perşembe ve cuma günlerini derslerini de ders_programi sözlüğüne ekle. Yeni geçen dersler için kitaplar sözlüğüne de kitap ekle.
  2. Program sonunda toplam kaç kitap eksik olduğunu yazdır. İpucu: bir sayac = 0 değişkeni tut ve her eksikte sayac = sayac + 1 yap.
  3. Kullanıcı sözlükte olmayan bir gün girerse, hangi günlerin tanımlı olduğunu ekrana yazdır. İpucu: for gun in ders_programi: ile anahtarları dolaşabilirsin.

Projeyi güçlendirme planı

Proje: Ders Programı Kontrolü için yalnız çalışan bir gösterim hazırlamak yeterli değildir. İyi bir proje; hedefi, kullanıcıyı, sınırları, test koşullarını ve başarısız denemeleri de görünür kılar. Bu genişletme çalışmasında bir dosyadaki satırları okuyup basit özet çıkaran araç bağlamını kullanarak çalışan kısa bir Python 3 programı, örnek girdiler ve beklenen çıktılar oluştur. Dersin hedefi “Sözlük ve listelerle ders programını tutup güne göre dersleri ve kitapları listeleyen bir program yaz” olsa da proje sayfasında ölçülmemiş bir sonucu kesin başarı gibi yazma.

1. Proje özeti ve kapsam

Önce üç cümle yaz: Çözmek istediğin sorun nedir, bu sorun kimin için önemlidir ve ilk sürüm özellikle neyi yapmayacaktır? Kapsam dışını belirtmek projeyi küçültmez; tamamlanabilir hâle getirir. Ders programını nasıl saklarız? ile Her dersin kitabını eşleştirmek arasındaki ilişkiyi projenin temel varsayımı olarak yaz ve bu varsayımı hangi testin doğrulayacağını belirt.

2. Kabul ölçütleri

“Proje: Ders Programı Kontrolü” için kabul ölçütlerini “çalışıyor” gibi belirsiz sözcüklerle bırakma. Süre, mesafe, doğru deneme sayısı, ekran genişliği veya kullanıcı adımı gibi gözlenebilir bir ölçü seç. Ölçüm mümkün değilse en azından üç ardışık denemede aynı davranışın görülüp görülmediğini kaydet.

3. Test matrisi

3. Test matrisi tablosu
TestKoşulBeklenenGerçek sonuçSonraki karar
NormalStandart giriş ve tam bağlantıTemel görev tamamlanırTest sırasında doldurKoru veya küçük iyileştirme yap
SınırEn düşük ya da en yüksek kabul edilen değerSistem kararlı kalırTest sırasında doldurEşiği veya kuralı gözden geçir
HataEksik, yanlış ya da beklenmeyen girişGüvenli ve anlaşılır tepkiTest sırasında doldurHata yönetimi ekle
TekrarAynı koşulda en az üç denemeBenzer sonuçlarTest sırasında doldurTutarsızlığın kaynağını araştır

4. Sürüm günlüğü

“Proje: Ders Programı Kontrolü” projesinin her sürümü için tarih, değiştirdiğin tek ana karar, değişikliğin nedeni ve test sonucu yaz. İlk sürümün çalışmaması başarısızlık değildir; Ders programını nasıl saklarız? veya Her dersin kitabını eşleştirmek ile ilgili hangi varsayımın yeniden düşünülmesi gerektiğini gösteren veridir. Görsel kullanırken kişisel bilgi ve özel arka plan ayrıntılarını paylaşma.

5. Sunum ve öz değerlendirme

“Proje: Ders Programı Kontrolü” projesini iki dakikada anlatacak şekilde hazırlan: sorun, çözüm yaklaşımı, bir dosyadaki satırları okuyup basit özet çıkaran araç için en önemli test sonucu ve bir sonraki adım. “Tamamlandı” demek yerine hangi kısmın doğrulandığını ve hangi kısmın hâlâ geliştirilmesi gerektiğini açıkla.

Sık yapılan hatalar

Büyük/küçük harf tuzağı

İlk denememde .lower() yazmayı unutmuştum. Kullanıcı Pazartesi yazdığında program "ders programı bulunamadı" dedi, çünkü sözlükteki anahtar küçük harfli pazartesi idi. Beklenen sonuç ile gerçek sonuç farklıydı; sorunu bulunca girdiye .lower() ekledim ve düzeldi.

Sözlükte olmayan anahtarı istemek

ders_programi["cumartesi"] yazarsan ve o anahtar yoksa Python KeyError hatası verir ve program durur. Bu yüzden anahtarı doğrudan almadan önce if gun in ders_programi ile kontrol etmek güvenlidir.

Girinti hatası

Döngü veya if içindeki satırları 4 boşluk girmezsen Python IndentationError verir. Bir bloğun tüm satırları aynı hizada olmalıdır.

Güvenlik notu

Bu program tamamen kendi bilgisayarında çalışan, kendi yazdığın güvenli bir koddur. Yalnız kendine ait, güvendiğin kodları çalıştır. Programa gerçek ad, adres, telefon gibi kişisel bilgilerini yazma; ders adları ve kitaplar bu proje için yeterlidir.

Ders özeti

Kontrol soruları

  1. Sözlükte anahtar ne işe yarar?
  2. ders_programi["salı"] ifadesi bize ne döndürür?
  3. .lower() ve .strip() girdiye ne yapar?
  4. if gun in ders_programi kontrolünü kaldırırsak, olmayan bir gün girilince ne olur?
  5. Eksik kitap kontrolünde not in ifadesi hangi soruyu sorar?

Cevaplar

  1. Anahtar, karşısındaki değere ulaşmamızı sağlar; sözlükte kelimeyi bulup anlamını okumak gibidir.
  2. salı gününün ders listesini, yani ["ingilizce", "matematik", "müzik"] döndürür.
  3. .lower() harfleri küçültür, .strip() baştaki ve sondaki boşlukları siler; böylece "Pazartesi" ve " pazartesi " aynı kabul edilir.
  4. Program KeyError hatası verir ve durur, çünkü olmayan bir anahtarı almaya çalışırız.
  5. "Bu gerekli kitap çantadaki kitaplar listesinde yok mu?" sorusunu sorar; yoksa o kitap eksiktir.

Ek doğrulama görevi

“Proje: Ders Programı Kontrolü” için ikinci bir örnek oluştur: bir dosyadaki satırları okuyup basit özet çıkaran araç. İlk çözümü aynen kopyalamak yerine Ders programını nasıl saklarız? kavramının hangi bölümde, Her dersin kitabını eşleştirmek kavramının hangi kararda kullanıldığını işaretle. Sonucu değerlendirmek için şu iki soruya yazılı cevap ver: “Beklediğim davranış neydi?” ve “Gerçekte hangi kanıtı gördüm?”

Ardından kontrol listesinden özellikle “Kod Python 3 sözdizimiyle çalışıyor mu?” ve “Aynı kod gereksiz tekrar olmadan yeniden kullanılabiliyor mu?” maddelerini kullan. İlk denemede fark bulamazsan bir sınır koşulu ekle; örneğin en küçük değer, en büyük değer, boş giriş, bağlantı kaybı veya yeniden başlatma durumu. Son notunda yaptığın tek değişikliği ve bu değişikliğin sonucu nasıl etkilediğini açıkla.

Kaynak ve doğrulama notu

“Proje: Ders Programı Kontrolü” dersi için doğrulama odağı Ders programını nasıl saklarız? ile Her dersin kitabını eşleştirmek arasındaki ilişkinin örnekler üzerinde tutarlı çalışmasıdır. Kod örnekleri Python 3 sözdizimi esas alınarak hazırlanmıştır. Çalıştırma ortamına göre küçük farklar görülebileceği için örnekler önce güvenli bir çevrim içi editörde veya yerel geliştirme ortamında denenmelidir.

Sonraki ders

Proje: Basit Spor İstatistikleri

Quiz’i BaşlatPython Temelleri bölümüne dön
SORU HAVUZU

Bu dersi 10 soruyla pekiştir

Bu ders için 20 soruluk bir havuz hazırlandı. Her başlangıçta 10 soru ve seçenekler yeniden karıştırılır.