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
puan_gecerli_mi(0)vepuan_gecerli_mi(100)Truedöndürür.puan_gecerli_mi(-1)vepuan_gecerli_mi(101)Falsedöndürür.- Boş puan listesinde
ortalama_hesapla([])açıkçaNonedöndürür. [60, 80]ortalaması70olur.- 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
ogrenci_bul(..., 102)Ece kaydını döndürür.- Olmayan öğrenci numarası için
Nonedöndürülür. - Boş puanlı öğrencinin ortalaması
Noneolur; sıfırmış gibi değerlendirilmez. - Başarılı öğrenci listesi öğrenci adlarını veya kayıtlarını tutabilir; seçiminizi tek biçimde sürdürün.
- Özgün
ogrencilerlistesi yalnızca rapor üretmek için gereksiz yere değiştirilmez. - 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.66666666666667Ondalı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ı
novead, 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çinValueErrorgibi 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 yokyazdırın.
Kabul kriterleri
- Geçerli CSV satırı doğru sözlüğe dönüşür.
- Puanı olmayan
103,Cansatırı geçerli bir kayıt olarak işlenebilir ve ortalamasıNoneolur. abcalanı seçilen hata politikasına göre tutarlı biçimde ele alınır.- Dosya bulunmadığında traceback’i gizlemek yerine kullanıcıya anlaşılır kısa mesaj verilir; başka programlama hataları geniş bir
except Exceptionile yutulmaz. - Aşama 1 ve Aşama 2’deki hesaplama fonksiyonları mümkün olduğunca değiştirilmeden kullanılmaya devam eder.
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:
- Program üç aşamada nasıl değişti?
- Hangi fonksiyonu/modülü değiştirmeden yeniden kullanabildiniz?
- En önemli sınır veya hata durumu neydi?
- Bir sonraki sürümde tek bir iyileştirme yapacak olsanız neyi seçerdiniz?
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.