Uygulama 10 | Sınıftaki Öğrencilerin Geçme - Kalma Durumunu Hesaplama

Ders ortalaması hesaplama ya da hesap makinesi tarzında bir sürü uygulamamız olduğunu biliyorum ancak bir şeyi pratik etmek için bunların gayet güzel uygulamalar olduğunu düşünüyorum. Bu uygulamamızda bir lisede bulunan bir sınıfın öğrencilerinin not ortalamalarını hesaplayacağız. Ancak burada, OOP yapılarını tekrar edeceğiz ve yeni kullanımları göreceğiz.

Bu uygulamada bir öğretmenmişiz gibi davranacağız ve notları kendimiz gireceğiz. Sınıf listesinde olduğu gibi bir ID ve isim de olacak. Başlayalım.

Bunun için ilk önce Aclass isminde bir sınıf oluşturuyorum:

Sınıfı tanımladıktan sonra __init__ metodunu tanımlıyorum ve içine self, id, name, grades=[] olmak üzere self haricinde 3 argüman veriyorum. Dikkat edelim, ilk defa gördüğünüz bir şey var; bir __init__ metoduna veya herhangi bir fonksiyona argüman verirken onun tipini ve varsayılan değerini atayabilirsiniz. grades=[] derken aslında notları bir listede tutacağımı söylüyorum.

Sonrasında klasik bir şekilde self.id = id tarzında atamalarımı yapıyorum.

Şimdi, alacağımız notların ortalamasını bulmamız gerekiyor. Genel olarak liselerde 3 adet sınav yapıldığı için bunu böyle kabul ediyorum. Bunun için calc() isimli bir metot (calc/calculate/hesapla) hazırlıyorum ve içine self parametresini veriyorum.

Bu metodun içerisine result = 0 tarzında bir kod yazdım. result değişkeni, notların toplamını tutacak olan değişkendir. Sonrasında self.grades yani notların tutulduğu liste içerisinde for döngüsü ile geziniyorum. for döngüsünün içine girince de result değişkenine, listedeki notların toplamını atıyorum. Son olarak;

self.average = result / 3 diyorum ve ortalamasını alıyorum.

Her listenin her elemanını tek tek gezdiğimiz için hepsinde hakimiyetimiz var. Eğer bir not 0 ile 100 arasında değilse öğretmeni uyarıyoruz ve hatayı, hangi öğrenciyi tanımlarken yaptığını ona bildiriyoruz. Birazdan kodu çalıştırdığımızda bunun nasıl çalıştığını göreceksiniz.

Bir sıkıntımız daha var; öğretmenimiz yanlışlıkla 3 not yerine 4 not girebilir. Bizim bunu engellememiz, böyle bir durum oluşursa öğretmeni uyarmamız gerekir. Bunun için bir kontrol daha sağlamamız lazım.

Bunun için gradeCounter isimli bir değişken atıyorum ve ona 0 değerini veriyorum. Zaten biraz önce tanımladığımız ve gradeCounter değişkeninin hemen altında bulunan for döngüsünü self.grades olarak ayarladığımız için kişi bazında kontrol sağlayabiliriz.

Bu değişkeni tanımladıktan sonra for döngüsünün içine girip gradeCounter değişkenini 1 artırıyoruz. Bu sayede her instance başına düşen listedeki eleman kadar artış gerçekleşecektir. Sonrasında if gradeCounter > 3 ifadesini veriyorum ve girilen not 3 adetten fazla ise öğretmeni uyarıyorum. Üstelik ona hatasının yerini ve girdiği yanlış notu da gösteriyorum.

Şimdi, ortalamayı hesaplamamız lazım. Bunun için basit bir kontrol sağlıyorum.

self.average değeri yani ortalama değeri 50'den küçükse "Kaldın", değilse "Geçtin" diyorum. Bu noktada eğer başka bir geçme-kalma kriteri belirlemek isterseniz bunu yapabilirsiniz.

Bu yapıda gözünüze farklı gelebilecek iki adet yapı söz konusu; '%.2f' % ve rjust(10). rjust() metodunun ne yaptığını String Metotları isimli blogdan biliyorsunuz; ufak bir hatırlatma yapalım:

Bu metodu, çıktının güzel gözükmesi için koydum.

'%.2f' % ifadesi ise float tipinde gelen çıktının ondalıklı kısmında yalnızca 2 adet hane yazdırılmasını sağlar. Örneğin 225.67777777 tarzında bir ifade söz konusuysa çıktımız 225.67 olarak gelecektir; '%.2f' % ifadesi bunu sağlıyor. Dışarıdaki % işaretinden sonra, bu işlemin uygulanmasını istediğiniz değişkeni veya değeri girmeniz gerekir. Bu yüzden orada '%.2f' % self.average şeklinde bir kod mevcut. Eğer öğrencinin ortalaması 60.4777777 tarzında gelirse bu, 60.47 olarak alınacaktır.

İşlemlerimiz tamamlandı. Şimdi, yapılacak işlemlerin sonucunda ekrana bir çıktı vermemiz gerekiyor.

Burada, öğrencinin sıra numarasını, adını ve ortalamasını yazdırıyoruz. Ayrıca ortalamayı hesaplayan metot calc() metodu olduğu için ve şu an __init__ içerisinde olduğumuz için self.calc() diyerek hem metodun çalışmasını sağlıyor hem de sonucu ekrana veriyoruz.

Şimdi, örneğin 4 öğrenci tanımlayalım bakalım.

Gördüğünüz üzere sıra numarası, isim ve rastgele puanlar verdim. Şimdi, kodu çalıştırmayı deneyelim.

Çıktımız gayet başarılı ve güzel, düzenli bir şekilde geldi. Ayrıca geçme-kalma hesaplamaları da gayet başarılı.

Şimdi, bir öğrenci için 4 tane sınav notu girmeyi deneyelim.

student3 yani "x" için 4 adet not girdim ve karşıma ayarladığım gibi bir hata mesajı geldi. Üstelik yeşil kutucuk içerisine bakarsanız hatanın nerede olduğunu açıklayan bir ifademiz var. Dikkat ederseniz, hatayı bulduğu satırın kendisinde duruyor. Yani 1 ve 2. sıradaki öğrenciler yazdırıldı ancak 3. öğrencide hata bulunduğu için orada durdu. Bu da hatanın nerede olduğunu gösteren bir belirteçtir.

Son olarak, 100'den büyük bir not girelim.

Bu şekilde, doğru bir hata mesajı ile karşılaştık. Bu uygulamayı, üniversite puan hesaplama sistemine göre de yapabilirsiniz. Ayrıca dilerseniz başka sınıflar oluşturabilirsiniz; tamamen size kalmış, ben yol göstericiyim.

Kodun Kesintisiz Hâli


Yayınlanma Tarihi: 2023-01-01 16:46:31

Son Düzenleme Tarihi: 2023-01-05 10:04:53