Hesap makinemi geliştirdim ama 0'a bölünce çöküyor, bir de her işlemden sonra kapanıyor

Selam tekrar :slightly_smiling_face: Önceki konumda input() ile sayı almayı öğrenmiştim, sağ olun. Şimdi hesap makinesine işlem seçme ekledim:

a = float(input("Birinci sayı: "))
islem = input("İşlem (+, -, *, /): ")
b = float(input("İkinci sayı: "))

if islem == "+":
    print(a + b)
elif islem == "-":
    print(a - b)
elif islem == "*":
    print(a * b)
elif islem == "/":
    print(a / b)

İki sorunum var:

  1. İkinci sayıya 0 yazıp bölme seçince program şu hatayla kapanıyor:
    ZeroDivisionError: float division by zero
    
  2. Bir hesap yapınca program bitiyor. Her seferinde yeniden çalıştırmam gerekiyor. Kullanıcı “çık” diyene kadar sürekli hesap yapsın istiyorum, bunu nasıl yaparım?

Güzel ilerliyorsun, iki soru da tam yerinde. :clap:

1) Sıfıra bölme: Matematikte bir sayının 0’a bölümü tanımsız olduğu için Python da ZeroDivisionError verir. İki yolu var. Ya bölmeden önce kontrol edersin (if b == 0:), ya da önceki konudaki gibi try/except ile yakalarsın. Başlangıç için kontrol etmek daha anlaşılır.

2) Sürekli çalışması: Bunun için while True: ile sonsuz döngü kurulur. Kullanıcı “çık” yazınca break ile döngüden çıkılır.

İkisini birleştirince:

print("Hesap makinesi · çıkmak için 'çık' yaz")

while True:
    islem = input("\nİşlem (+, -, *, /) ya da çık: ").strip()
    if islem == "çık":
        print("Görüşürüz nöbetçi! 👋")
        break
    if islem not in ("+", "-", "*", "/"):
        print("Geçersiz işlem, tekrar dene.")
        continue          # döngünün başına dön

    try:
        a = float(input("Birinci sayı: "))
        b = float(input("İkinci sayı: "))
    except ValueError:
        print("Lütfen sadece sayı gir!")
        continue

    if islem == "+":
        sonuc = a + b
    elif islem == "-":
        sonuc = a - b
    elif islem == "*":
        sonuc = a * b
    else:  # bölme
        if b == 0:
            print("Sıfıra bölünemez!")
            continue
        sonuc = a / b

    print(f"Sonuç: {a:g} {islem} {b:g} = {sonuc:g}")

Bu örnekte kullandığımız yeni şeyler:

  • while True: → içindeki kod break görene kadar tekrar tekrar çalışır.
  • break → döngüden tamamen çıkar.
  • continue → o turun geri kalanını atlayıp döngünün başına döner.
  • .strip() → kullanıcının yanlışlıkla bastığı boşlukları siler (" + " → "+").
  • f"...{sonuc:g}" → 8.0 yerine 8 yazdırır, gereksiz .0’ı atar.

Bir sonraki adım olarak her işlemi bir fonksiyon (def topla(a, b):) yapmayı deneyebilirsin. Takılırsan yine yaz!