Ek: Üç aşamalı not takip uygulaması
Üç aşamalı not takip uygulaması
Bu çalışmada tek bir programı dönem boyunca üç aşamada büyüteceksiniz. Her aşamada, bir önceki aşamada çalışır hâle getirdiğiniz programın üzerine yazarsınız. Her aşamanın bir kabul kriterleri listesi var: programın o aşamada neleri doğru yapması gerektiğini madde madde sayar. Aşama, bu maddelerin hepsi sağlandığında biter.
Bu büyük bir dönem projesi değil. Her aşamada programa yalnız o sırada öğrendiğiniz konuyu eklersiniz: önce fonksiyonları, sonra kayıtları, en son dosya okumayı ve hata yakalamayı.
Problem
Bir ders için öğrenci adlarını ve 0–100 arası puanları tutan küçük bir program yazacaksınız. Program geçerli puanları kabul edecek, ortalamayı hesaplayacak ve başarılı öğrencileri gösterecek.
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.- Puan listesi boşsa
ortalama_hesapla([])hata vermez,Nonedöndürür. [60, 80]ortalaması70olur.- Başarı sınırı varsayılan olarak
50’dir ve anahtar kelime argümanıyla (sinir=60gibi) 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 işi yapıyor?
Aşama 2: Kayıtlara dönüştür
Zaman: 11. bölümden sonra.
Bu aşamada puan listesi yerine öğrenci kayıtlarıyla çalışı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’nin kaydını döndürür.- Olmayan bir öğrenci numarası için
Nonedöner. - Puanı olmayan öğrencinin ortalaması
Noneolur,0sayılmaz. - Başarılı öğrenci listesi öğrencilerin adlarını ya da kayıtlarını tutabilir. Hangisini seçtiyseniz programın her yerinde onu kullanın.
- Yalnız rapor hazırlamak için özgün
ogrencilerlistesi değiştirilmez. - Aynı öğrenci numarası iki kayıtta geçerse neden sorun çıkacağını 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ı sayıyı daha okunaklı karşılaştırmak isterseniz round(..., 2) kullanabilirsiniz.
Teslim
asama2.py- Bir tablo: normal bir durum, bir sınır değeri ve bir geçersiz durum için en az birer test.
Aşama 3: Dosyadan oku, hataları yakala
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ış
- Dosyayı UTF-8 kodlamasıyla okuyun.
- Her satırın ilk iki alanı
novead, kalan alanlar puandır. - Sayıya çevrilemeyen bir puan programı durdurmamalı.
- Hatalı puanı olan bir kayıtla ne yapacağınıza karar verin ve tek bir kural seçin:
- Hatalı puanı atla, kaydın geri kalanını koru; ya da
- Kaydın tamamını reddet ve anlaşılır bir hata mesajı yazdır.
- Seçtiğiniz kuralı kısa açıklamanıza yazın ve kodda da aynen uygulayın.
- Hataları türüyle yakalayın: dosya bulunamazsa
FileNotFoundError, sayıya çevrilemeyen alan içinValueError. Herexceptyalnız beklediğiniz hatayı yakalasın. - Çıktı olarak her öğrencinin adını ve ortalamasını yazdırın; ortalama yoksa
Puan yokyazdırın.
Kabul kriterleri
- Geçerli bir CSV satırı, doğru alanları olan bir sözlüğe dönüşür.
- Puanı olmayan
103,Cansatırı geçerli bir kayıt sayılır ve ortalamasıNoneolur. abcalanı seçtiğiniz kurala göre işlenir.- Dosya bulunmadığında kullanıcı uzun bir traceback yerine kısa ve anlaşılır bir mesaj görür. Başka programlama hataları her hatayı yakalayan bir
except Exceptionile gizlenmez. - Aşama 1 ve 2’deki hesaplama fonksiyonları olabildiğince değiştirilmeden kullanılır.
main.pydosyayı okur ve raporu yazdırır.islemler.pyise başka programlarda da kullanılabilecek hesaplama fonksiyonlarını tutar.
Zorunlu doğrulama
En az şu dört durumu ayrı ayrı deneyin:
- Normal dosya,
- Puanı olmayan öğ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?
- Programa tek bir iyileştirme daha yapacak olsanız hangisini seçerdiniz?
AI’dan bir hata mesajını açıklamasını ya da küçük bir düzeltme önermesini isteyebilirsiniz, ama kabul kriterlerini kendiniz deneyin. AI’ın önerdiği kodun hangi satırı neden değiştirdiğini açıklayamıyorsanız o değişikliği bitmiş saymayın.