Python da try - except fonksiyonları ile ilgili bir soru

Arkadaşlar, merhaba.
Bu işlemde int kontrolünün kullanıcı her iki sayıyı girdikten sonra değilde birinci_sayi'nında int girilmez ise
print("Birinci sayı değeri yanlış girildi!") çıktısının çalışması için nasıl bir yol izlenmeli. Teşekkürler.

while True :
birinci_sayi = input("Birinci sayı  > ")
ikinci_sayi  =  input("İkinci  sayı  > ")
try:
    sayi1 = int(birinci_sayi)
    sayi2 = int(ikinci_sayi)
    print(sayi1, "+", sayi2, "=", sayi1 + sayi2)

except ValueError :
    print("Birinci sayı değeri yanlış girildi!")

    print("İkinci sayı değeri yanlış girildi!")

bu kodlar yerine bence bu girilen verilerin tipini sorgulayan bir if sorgusu kullan daha çok işe yarar
mesela :

sayı = input('sayı gir : ')
if(str(type(sayı)) != 'int'):
    print('lütfen bir sayı giriniz')
1 Beğeni
while True:
    while True:
        birinci_sayi = input("Birinci Sayı >> ")
        try:
            birinci_sayi = float(birinci_sayi)
            break
        except:
            print("Lütfen sayısal değer giriniz")

    while True:
        ikinci_sayi= input("İkinci Sayı >> ")
        try:
            ikinci_sayi = float(ikinci_sayi)
            break
        except:
            print("Lütfen sayısal değer giriniz")
    
    toplam = birinci_sayi + ikinci_sayi
    print("\n{} + {} = {}\n".format(birinci_sayi,ikinci_sayi,toplam))

aynı yöntem ya da farklı bir yöntem ile kurulan farklı bir algoritma sayesinde yazılan kod sayısı azaltılabilir. Fakat bu şeklinde de istediğiniz işlevi yerine getiriyor.

1 Beğeni

yalnız bu kod bir while true döngüsü hiç bitmez bu nedenle öbür while döngüsüne geçemez bu nedenle bence orada while döngüsü kullanma

denemeden bilemezsin :smiley:

güzel çalışıyor

peki deneyeyim :no_mouth:

Merhaba,

İsterseniz bir fonksiyon tanımlayın, kullanıcının girdiği ifade sayı olana kadar, fonksiyon tekrar çağrılsın.

def sayi_iste(mesaj, hata_mesaji):
    try:
        return float(input(mesaj))
    except ValueError:
        print(hata_mesaji)
        return sayi_iste(mesaj, hata_mesaji)
        
        
sayi1 = sayi_iste("Sayı 1: ", "Birinci sayı değeri yanlış girildi!")
sayi2 = sayi_iste("Sayı 2: ", "İkinci sayı değeri yanlış girildi!")
print(sayi1, "+", sayi2, "=", sayi1 + sayi2)
4 Beğeni

hee oradaki break komutunu görmemişim

1 Beğeni

sayı her zaman str olur çünkü input’un dönüş değeri bu.

Sınıf ismine göre değerlendirme yapmak doğru değil. Şöyle yapılmalı:

type(sayı) != int
1 Beğeni

haklısınız inputun dönüş değerinin str olduğunu unutmuşum o nedenle daima lütfen bir sayı giriniz yazacak

niye ki niye doğru değil

İsmi aynı olan birden fazla sınıfın bulunmasının önünde bir engel yok.

nasıl yani ben hiç bir şey anlamadım

Pardon, str(type(1)) zaten "int" değil. Olsaydı söylediğim geçerli olacaktı.

Arkadaşlar, bu komut satırı,

print(ilk_sayi, ‘/’, ikinci_sayi, ‘=’, int(ilk_sayi) / int(ikinci_sayi))

şurada olunca :

try:
       ikinci_sayi = float(ikinci_sayi)
       print(ilk_sayi, '/', ikinci_sayi, '=', int(ilk_sayi) / int(ikinci_sayi))

hata almıyorum.Fakat aşağıdaki gibi sonda olunca ikinci sayıyı girerken ValueError satırı çalışıyor, ikinci sayıya 0 değerini girince ZeroDivisionError satırı çalışmıyor. Bunun sebebi ne olabilir. Şimdiden teşekkür ederim.

#encoding:cp1254
    while True :
        while True:

            ilk_sayi = input("İlk Sayı :")

            try :
                ilk_sayi = float(ilk_sayi)
                break
            except ValueError:
                print("Lütfen sadece sayı değeri giriniz.")
            except :
                print("Girdiğiniz değeri lütfen kontrol ediniz.")

        while True :
            ikinci_sayi = input("İkinci Sayı :")
            try:
                ikinci_sayi = float(ikinci_sayi)
                break
            except ValueError:
                print("Lütfen Sadece Sayı değeri giriniz!")
            except ZeroDivisionError:
                print("Sayılar Sıfıra bölünemez.")

 print(ilk_sayi, '/', ikinci_sayi, '=', int(ilk_sayi) / int(ikinci_sayi))

çünkü siz print fonksiyonu içerisinde sayılara bölme işlemi yaptırıyorsunuz. ve try bloğu içerisinden dışarıya taşıdığınızda ZeroDivisionError verebilmesi icin tekrar bi try except bloğu yazmanız gerekir

1 Beğeni