Hata kontrollerini kullanarak üçgenin alanını bulan python uygulaması

Kodla Büyü

hakimiyet001

Seçkin Üye
Seçkin Üye
Mesajlar
537
Bu hafta programlama temelleri dersinde hata kontrollerini kullanma işlenecek. Bununla ilgili güzel bir python uygulaması araştırdım. Aşağıda verdiğim konu gayet güzel anlatılmış. Öneririm

Geometrinin önemli konularından biri de üçgenlerdir. Üç kenarı olan geometrik şekle üçgen denir. Üçgenin alanını bulmak için taban kenarıyla bu tabana dik indirilen yüksekliğin girilmesi gerekir. Bu uygulamada üçgenin alanını bulurken gerekli hata kontrollerini de gerçekleştireceğiz.

Visual Studio programını açalım.

İsmi Geometri olan yeni bir Python uygulaması oluşturalım.

Projeye ucgen.py isminde bir python dosyası ekleyelim.

Öncelikle programda kullanılan değişkenleri belirleyelim. Taban kenarı için a, yükseklik için h değişken adını kullanalım. Üçgenin alanını da alan değişken ismiyle belirleyelim. Üçgene ait kenar uzunlukları pozitif sayı olmalıdır. Verilen sayılar reel sayı da olabilir. Buna göre değişken tipini belirlememiz gerekir. Değişkenleri oluşturalım.

# Değişkenleri Tanımla
a: float = 0.0
h: float = 0.0
alan: float = 0.0
Kullanıcıdan taban kenarının ve yüksekliğin alınması gerekir. Klavyeden girilen değerler tırnak içinde ve metinsel değerlerdir. Bu değerlerin float değişken tipine dönüştürülmesi gerekir. Buna göre kullanıcıdan değer girişlerini alalım.

# Değerleri Gir
a = float(input("Taban Kenar Uzunluğu : "))
h = float(input("Yükseklik : "))
Artık üçgenin alanını hesaplayabiliriz. Alan formilü taban kenar x yükseklik / 2 idi. Şimdi bu formülü kullanarak üçgenin alanını bulalım.

# İşlemi Yap
alan = (a * h) / 2
Sonucu ekranda görüntüleyelim. Elde edilen sonuç reel yani ondalıklı olduğu için sonucu yuvarlayarak görüntüleyelim.

# Sonucu Görüntüle
print(f"Üçgenin Alanı : {alan:.2f}")
En basit anlamda üçgenin alanını bulduk. Şimdi programda oluşabilecek hataları ve çözümlerini bulmaya çalışalım.

Kullanıcı taban kenarı ya da yüksekliği girerken sayı yerine harf, boşluk veya başka karakterlere basarsa oluşan hatayı düzeltme.

Kullanıcı taban kenarı ya da yüksekliği girerken sayı yerine harf, boşluk veya başka karakterlere basarsa ne olur. Hadi bunu deneyelim. Programı çalıştıralım. Taban kenarı girerken sayısal bir değer yerine k harfina basalım ve Enter tuşuna basalım. Program float tipinde bir değişkene string bir değer girdiğimize dair bilgi verir ve programı sonlandırır. Ya da hiçbir tuşa basmayıp Enter tuşuna bastığımızda aynı hatayı verecektir. Bu da bir program için istenmeyen bir durumdur. Kullanıcının bilgilendirilmesi ve programın devam etmesi gerekir. Bu işlemi gerçekleştirmek için try - except hata bloğunu kullanmamız gerekir. Hata oluşabilecek kod satırı try bloğu içine alınır. Oluşacak hatalar ise except bloğunda görüntülenir. Şimdi bunu yapalım.

try:
# Değerleri Gir
a = float(input("Taban Kenar Uzunluğu : "))
h = float(input("Yükseklik : "))
except ValueError:
print("Lütfen sayısal değer girişi yapınız...")
Programı çalıştıralım. Taban kenarı yerine k harfini girelim. Program hatayı bulacak ancak hatalı bir şekilde işlemi tamamlayacaktır. Halbuki hatalı bir değer girişi yapıldığında işlemin yapılmaması gerekir. Bunun için while döngüsünden yararlanabiliriz.

while True:
try:
# Değerleri Gir
a = float(input("Taban Kenar Uzunluğu : "))
h = float(input("Yükseklik : "))
break
except ValueError:
print("Lütfen sayısal değer girişi yapınız...")
Programı çalıştıralım. Taban kenarı ve yükseklik değerleri sayı olarak girilmediği müddetçe program devam etmeyecektir. Aynı zamanda sonlanmayacaktır.

Kullanıcı taban kenarı ya da yükseklik değerini negatif sayı girerse oluşacak hatayı düzeltme

Geometrik şekillerde kenarlara negatif sayı girilemez. Bu tip bir hata programın sonlandırılması için bir sebep değildir. Çünkü sayılar negatif olabilir. Bu hatanın düzeltilmesi için programcının kendi hata türünü oluşturması gerekir. Biz bu hata türünü yakalamak için NegativeError hata yakalama işlemini gerçekleştireceğiz. Programın başına tanımlayacağımız hata türlerini class olarak girmemiz gerekir. Programın başına aşağıdaki kodları yazalım.

class NegativeError(Exception):
pass
Peki tanımladığımız bu hata türünü program içinde nasıl kullanacağız. Şimdi bunu gerçekleştirelim.

while True:
try:
# Değerleri Gir
a = float(input("Taban Kenar Uzunluğu : "))
if a < 0:
raise NegativeError

h = float(input("Yükseklik : "))
if h < 0:
raise NegativeError

break
except NegativeError:
print("Negatif Sayı Giremezsiniz...")
except ValueError:
print("Lütfen sayısal değer girişi yapınız...")
Programı çalıştıralım. Artık hem a hem de h değişkeni için negatif sayı girmemiz engellenmiş oldu.

Kullanıcı taban kenarı ya da yükseklik değerini sıfır girerse oluşacak hatayı düzeltme

Geometrik şekillerde kenarlara sıfır sayısı girilemez. Bu tip bir hata programın sonlandırılması için bir sebep değildir. Çünkü sayılar sıfır olabilir. Bu hatanın düzeltilmesi için programcının kendi hata türünü oluşturması gerekir. Biz bu hata türünü yakalamak için ZeroError hata yakalama işlemini gerçekleştireceğiz. Programın başına tanımlayacağımız hata türlerini class olarak girmemiz gerekir. Programın başına aşağıdaki kodları yazalım.

class ZeroError(Exception):
pass
Peki tanımladığımız bu hata türünü program içinde nasıl kullanacağız. Şimdi bunu gerçekleştirelim.

while True:
try:
# Değerleri Gir
a = float(input("Taban Kenar Uzunluğu : "))
if a < 0:
raise NegativeError
elif a == 0:
raise ZeroError

h = float(input("Yükseklik : "))
if h < 0:
raise NegativeError
elif h == 0:
raise ZeroError

break
except ZeroError:
print("0 Sayısını Giremezsiniz...")
except NegativeError:
print("Negatif Sayı Giremezsiniz...")
except ValueError:
print("Lütfen sayısal değer girişi yapınız...")
Programı çalıştıralım. Artık hem a hem de h değişkeni için 0 sayısını girmemiz engellenmiş oldu. Programı çalıştırdığınızda hatalı işlem girişi yapıldığında işlemler ekranda listelenmekte ve programa ait çalıştırma satırları çoğalmaktadır. Bu da kullanıcının kafasını karıştırır. Hatalı işlem yaptığında ekranın temizlenmesini sağlayalım. Öncelikle programın başına aşağıdaki kodu yazarak os sistem kütüphanesini yükleyelim.

import os
Daha sonra sistem kütüphanesi içinde kullanılan cls komutunu çalıştıralım. Bu komutu hata mesajı görüntülendikten sonra kullanalım. Böylece kullanıcı hatayı neden yaptığını görsün.

while True:
try:
# Değerleri Gir
a = float(input("Taban Kenar Uzunluğu : "))
if a < 0:
raise NegativeError

elif a == 0:
raise ZeroError

h = float(input("Yükseklik : "))
if h < 0:
raise NegativeError
elif h == 0:
raise ZeroError

break
except ZeroError:
print("0 Sayısını Giremezsiniz...")
input()
os.system("cls")
except NegativeError:
print("Negatif Sayı Giremezsiniz...")
input()
os.system("cls")
except ValueError:
print("Lütfen sayısal değer girişi yapınız...")
input()
os.system("cls")
Programı çalıştıralım. Artık kullanıcı gereksiz satırları görmeyecek, uygulama en sade haliyle çalışacaktır.

Kullanıcı yardımcı tuşlarla beraber farklı işlemler yaparsa oluşacak hatayı düzeltmek için aşağıdaki kod satırını except kod bloğuna eklemeniz yeterli olacaktır.

except KeyboardInterrupt:
print("\nLütfen sayısal değer girişi yapınız...")
input()
os.system("cls")
 
Python:
# Kullanıcıdan 10 tane sayı giriyoruz
sayilar = []
for i in range(10):
  sayi = int(input(f"{i+1}. sayıyı giriniz: "))
  sayilar.append(sayi)

# 3 ve 5'e bölünen sayıları ve toplam adetlerini tutan değişkenler
üc_bes_bolunenler = []
toplam_adet = 0

# Her sayıyı kontrol ediyoruz
for sayi in sayilar:
  if sayi % 3 == 0 and sayi % 5 == 0:
    üc_bes_bolunenler.append(sayi)
    toplam_adet += 1

# Sonuçları yazdırıyoruz
print("\n3 ve 5'e bölünen sayılar:")
for sayi in üc_bes_bolunenler:
  print(sayi)

print(f"\nToplam {toplam_adet} adet 3 ve 5'e bölünen sayı var.")


Programın Çalışma Şekli:
  1. İlk önce, sayilar adında bir liste oluşturarak 10 tane sayıyı kullanıcıdan alıyoruz.
  2. Ardından, üc_bes_bolunenler adında bir liste ve toplam_adet adında bir değişken oluşturuyoruz. Bunlar sırasıyla 3 ve 5'e bölünen sayıları ve bu sayıların toplam adedini tutacak.
  3. Bir for döngüsü kullanarak her sayıyı sırayla kontrol ediyoruz.
  4. Eğer bir sayı hem 3'e hem de 5'e bölünüyorsa, üc_bes_bolunenler listesine ekleniyor ve toplam_adet değişkeni 1 arttırılıyor.
  5. Döngü tamamlandıktan sonra, üc_bes_bolunenler listesindeki tüm sayılar yazdırılıyor ve 3 ve 5'e bölünen toplam sayı adedi ekrana basılıyor.

Notlar:
  • Bu programda, kullanıcı tarafından girilen tüm sayıların tam sayı olduğu varsayılmıştır.
  • Programı farklı sayıda sayı için çalıştırmak istiyorsanız, for döngüsündeki 10 değerini değiştirebilirsiniz.
  • İsterseniz, programı 3 veya 5'e bölünen herhangi bir sayıyı bulmak için de değiştirebilirsiniz. Bunu yapmak için if koşulunuzu buna göre güncellemeniz gerekir.
 
Son düzenleme:
Geri
Üst