Kademeli Uygulama — Not Takip Programı

Kademeli not takip uygulaması

Bu çalışma tek bir problemi dönem boyunca üç kez büyütür. Her aşama önceki çalışan sürümün üzerine eklenir; her seferinde kabul kriterleri ile doğrulama yapılır.

Amaç büyük bir dönem projesi yazmak değil, öğrendiğiniz yeni aracı mevcut bir programa kontrollü biçimde eklemektir.

Ortak problem

Bir ders için öğrenci adlarını ve 0–100 arası puanları tutan küçük bir program geliştireceksiniz. Program geçerli puanları kabul edecek, ortalama hesaplayacak ve başarılı öğrencileri gösterecektir.


Aşama 1 — Fonksiyonlarla düzenle

Zaman: 7. bölümden sonra.

Başlangıç verisi:

puanlar = [70, 85, 40, 100]

Aşağıdaki fonksiyonları yazın:

def puan_gecerli_mi(puan):
    ...


def ortalama_hesapla(puanlar):
    ...


def basarili_mi(puan, sinir=50):
    ...

Kabul kriterleri

  1. puan_gecerli_mi(0) ve puan_gecerli_mi(100) True döndürür.
  2. puan_gecerli_mi(-1) ve puan_gecerli_mi(101) False döndürür.
  3. Boş puan listesinde ortalama_hesapla([]) açıkça None döndürür.
  4. [60, 80] ortalaması 70 olur.
  5. Başarı sınırı varsayılan olarak 50dir; anahtar kelime argümanıyla değiştirilebilir.

En az şu kontrolleri çalıştırın

assert puan_gecerli_mi(0)
assert puan_gecerli_mi(100)
assert not puan_gecerli_mi(101)
assert ortalama_hesapla([60, 80]) == 70
assert ortalama_hesapla([]) is None
assert basarili_mi(50)
assert basarili_mi(60, sinir=60)

Teslim

  • asama1.py
  • 3–5 cümle: Hangi fonksiyon hangi sorumluluğu taşıyor?

Aşama 2 — Kayıtlara dönüştür

Zaman: 11. bölümden sonra.

Artık yalnız puan listesi değil, öğrenci kayıtları kullanın:

ogrenciler = [
    {"no": 101, "ad": "Ada", "puanlar": [70, 85, 90]},
    {"no": 102, "ad": "Ece", "puanlar": [45, 55, 50]},
    {"no": 103, "ad": "Can", "puanlar": []},
]

Aşama 1 fonksiyonlarını mümkün olduğunca yeniden kullanın. Şunları ekleyin:

def ogrenci_bul(ogrenciler, no):
    ...


def ogrenci_ortalamasi(ogrenci):
    ...


def basarili_ogrenciler(ogrenciler, sinir=50):
    ...

Kabul kriterleri

  1. ogrenci_bul(..., 102) Ece kaydını döndürür.
  2. Olmayan öğrenci numarası için None döndürülür.
  3. Boş puanlı öğrencinin ortalaması None olur; sıfırmış gibi değerlendirilmez.
  4. Başarılı öğrenci listesi öğrenci adlarını veya kayıtlarını tutabilir; seçiminizi tek biçimde sürdürün.
  5. Özgün ogrenciler listesi yalnızca rapor üretmek için gereksiz yere değiştirilmez.
  6. Aynı öğrenci numarasının iki kayıtta bulunmasının neden sorun olduğunu açıklayın.

Önerilen kontroller

assert ogrenci_bul(ogrenciler, 102)["ad"] == "Ece"
assert ogrenci_bul(ogrenciler, 999) is None
assert ogrenci_ortalamasi(ogrenciler[2]) is None
assert ogrenci_ortalamasi(ogrenciler[0]) == 81.66666666666667

Ondalıklı karşılaştırmada daha okunaklı isterseniz round(..., 2) kullanabilirsiniz.

Teslim

  • asama2.py
  • Bir tablo: normal, sınır ve geçersiz durum için en az bir test.

Aşama 3 — Dosyadan oku, hatayı yönet

Zaman: 13. bölümden sonra.

Programı iki modüle ayırın:

not_takip/
├── main.py
├── islemler.py
└── ogrenciler.csv

Örnek ogrenciler.csv:

101,Ada,70,85,90
102,Ece,45,55,50
103,Can
104,Deniz,80,abc,100

İstenen davranış

  • UTF-8 ile dosyayı okuyun.
  • İlk iki alanı no ve ad, kalan alanları puanlar olarak yorumlayın.
  • Sayıya dönüşmeyen puan için programın tamamı çökmemeli.
  • Hatalı puan içeren kaydın nasıl ele alınacağına ilişkin tek bir açık politika seçin:
    • hatalı puanı atla ve kaydı koru, veya
    • bütün kaydı reddet ve anlaşılır hata bildir.
  • Seçtiğiniz politikayı kodda ve kısa açıklamada aynı biçimde uygulayın.
  • Dosya bulunamazsa FileNotFoundError, geçersiz sayısal alan için ValueError gibi anlamlı hata türlerini dar biçimde ele alın.
  • Çıktı olarak her öğrencinin adını ve ortalamasını yazdırın; ortalama yoksa Puan yok yazdırın.

Kabul kriterleri

  1. Geçerli CSV satırı doğru sözlüğe dönüşür.
  2. Puanı olmayan 103,Can satırı geçerli bir kayıt olarak işlenebilir ve ortalaması None olur.
  3. abc alanı seçilen hata politikasına göre tutarlı biçimde ele alınır.
  4. Dosya bulunmadığında traceback’i gizlemek yerine kullanıcıya anlaşılır kısa mesaj verilir; başka programlama hataları geniş bir except Exception ile yutulmaz.
  5. Aşama 1 ve Aşama 2’deki hesaplama fonksiyonları mümkün olduğunca değiştirilmeden kullanılmaya devam eder.
  6. main.py, dosya okuma/raporlama akışını; islemler.py, tekrar kullanılabilir hesaplama davranışlarını taşır.

Zorunlu doğrulama

En az şu dört durumu ayrı ayrı deneyin:

  • normal dosya,
  • boş puanlı öğrenci,
  • sayısal olmayan puan,
  • olmayan dosya yolu.

Son kısa açıklama

En fazla 150 kelimeyle şunları yanıtlayın:

  1. Program üç aşamada nasıl değişti?
  2. Hangi fonksiyonu/modülü değiştirmeden yeniden kullanabildiniz?
  3. En önemli sınır veya hata durumu neydi?
  4. Bir sonraki sürümde tek bir iyileştirme yapacak olsanız neyi seçerdiniz?
ImportantAI kullanıyorsanız

AI’dan bir hata mesajını açıklamasını veya küçük bir düzeltme önermesini isteyebilirsiniz; ancak kabul kriterlerini kendiniz çalıştırın. Önerilen kodun hangi satırı neden değiştirdiğini açıklayamıyorsanız değişikliği tamamlanmış saymayın.

Back to top