While döngüsünün hatalı girişte yanlış cevap aldığı sorudan devamı konusunda yardım

Merhaba Yazdığım kodda def sistem_bilgilerini_gir(sistem_adi): fonksiyonu içindeki while döngüsünde kullanıcı hatalı giriş yaptığında Örnek olarak fiyat girilecek yerde string bir değer girildiğinde hata mesajını versin ve aynı soruyu tekrar doğru cevap alana kadar sorsun istiyorum fakat en başa dönüp ilk sorudan tekrardan daha önce cevaplanan soruları tekrardan yanıtlamak zorunda kalıyorum. break ile işlemi gerçekleştirdiğimde de hata veriyor. gemini copilot gpt3 gibi yapay zeka sitelerinden aldığım cevaplarla da sorunu çözemedim. Yardımcı olmanızı rica ederim.

Not. Özellikle Kodlama konusunda en iyi cevaplara ulaşabileceğim Aİ siteleri konusunda tavsiyelerinize de ihtiyacım var. Yardımlarınız için teşekkür ederim.

class Sistem:
    marka = "Winperax"
    tax = [8, 20, 25]

    def __init__(self, sistem_adi, en, boy, renk, fiyat):
        self.sistem_adi = sistem_adi
        self.en = en
        self.boy = boy
        self.renk = renk
        self.fiyat = fiyat


def sistem_sec():
    sistemler = ["Termessos", "Apollon", "Sky Phaselis", "Likya"]
    for i, sistem_adi in enumerate(sistemler):
        print(f"{i + 1}. {sistem_adi}")
    while True:
        try:
            secim = int(input("Lütfen Teklif verilecek sistemi listeden seçin (1-4): "))
            if 1 <= secim <= len(sistemler):
                return sistemler[secim - 1]
            else:
                print("Geçersiz seçim. Lütfen 1-4 arasında bir değer giriniz.")
        except ValueError:
            print("Geçersiz giriş. Lütfen bir tamsayı giriniz.")


def sistem_bilgilerini_gir(sistem_adi):
    while True:
        try:
            en = float(input("Eni giriniz: "))
            boy = float(input("Boyunu giriniz: "))
            renk = input("Rengini giriniz: ")
            fiyat = float(input("Fiyatını giriniz: "))
            return Sistem(sistem_adi, en, boy, renk, fiyat)
        except ValueError:
            print("Geçersiz giriş. Lütfen doğru bir sayısal değer giriniz.")
            continue


def main():
    guncel_sistem_adi = sistem_sec()
    guncel_sistem = sistem_bilgilerini_gir(guncel_sistem_adi)
    print("Hesaplanan sistemin teklif bilgileri:")
    print("Marka:", guncel_sistem.marka)
    print("Sistem Adı:", guncel_sistem.sistem_adi)
    print("En:", guncel_sistem.en)
    print("Boy:", guncel_sistem.boy)
    print("Renk:", guncel_sistem.renk)
    print("Fiyat:", guncel_sistem.fiyat)


if __name__ == "__main__":
    main()

type fonksiyonu ile girilen değerin tipini öğrenebilirsiniz.

def input_al(message: str, inputtype):
    user_input = input(message)
    try:
        user_input = inputtype(user_input)
        return user_input
    except ValueError:
        print("tip yanlış")
        return input_al(message, inputtype)

user_input = input_al("Enter a number: ", int)
print("User input:", user_input)

input() fonksiyonu yerine kendi kodunuzda yukarıdaki fonksiyonu kullanırsanız sorununuz cözülür.

Ben gtp3 kullanıyorum fakat gtp3 gittikce kötüleşiyor dediklerimi anlamaz oldu :slight_smile:

Özür dilerim yanlış mı ifade ettim bilemiyorum. Ben bu kontrolü
def sistem_bilgilerini_gir(sistem_adi): fonksiyonunda ki döngünün içinde uygulamak istiyorum. inputdan dönen değer istenen veri tipine uymuyorsa döngü kaldığı yerden doğru veri tipinde cevap gelene kadar aynı soruyu sorsun istiyorum. Sil baştan en başa dönmesin zaten kullanıcı doğru veri tiplerinde giriş yapmıştı önceki soruların verilen cevaplarında. Bu yüzden Kodunuzu kendi kodumda istediğim şekilde sonuç dönmesi için doğru bir şekilde nasıl kullanabilirim anlayamadım.

class Sistem:
    marka = "Winperax"
    tax = [8, 20, 25]

    def __init__(self, sistem_adi, en, boy, renk, fiyat):
        self.sistem_adi = sistem_adi
        self.en = en
        self.boy = boy
        self.renk = renk
        self.fiyat = fiyat


def input_al(message: str, inputtype):
    user_input = input(message)
    try:
        user_input = inputtype(user_input)
        return user_input
    except ValueError:
        print("tip yanlış")
        return input_al(message, inputtype)

def sistem_sec():
    sistemler = ["Termessos", "Apollon", "Sky Phaselis", "Likya"]
    for i, sistem_adi in enumerate(sistemler):
        print(f"{i + 1}. {sistem_adi}")
    while True:
        try:
            secim = int(input("Lütfen Teklif verilecek sistemi listeden seçin (1-4): "))
            if 1 <= secim <= len(sistemler):
                return sistemler[secim - 1]
            else:
                print("Geçersiz seçim. Lütfen 1-4 arasında bir değer giriniz.")
        except ValueError:
            print("Geçersiz giriş. Lütfen bir tamsayı giriniz.")


def sistem_bilgilerini_gir(sistem_adi):
    en = input_al("Eni giriniz: ", float)
    boy = input_al("Boyunuzu giriniz: ", float)
    renk = input_al("Rengini giriniz: ", str)
    fiyat = input_al("Fiyatını giriniz: ", float)
    return Sistem(sistem_adi, en, boy, renk, fiyat)



def main():
    guncel_sistem_adi = sistem_sec()
    guncel_sistem = sistem_bilgilerini_gir(guncel_sistem_adi)
    print("Hesaplanan sistemin teklif bilgileri:")
    print("Marka:", guncel_sistem.marka)
    print("Sistem Adı:", guncel_sistem.sistem_adi)
    print("En:", guncel_sistem.en)
    print("Boy:", guncel_sistem.boy)
    print("Renk:", guncel_sistem.renk)
    print("Fiyat:", guncel_sistem.fiyat)


if __name__ == "__main__":
    main()
    

Bu şekilde calışması lazım.

Evet bu şekilde çalıştı çok teşekkür ederim. Zahmet oldu.

1 Beğeni