Str - int doğrulama ve girişe dönme

Merhaba, python a yeni başladım, ilk denememi yapmak itedim fakat takıldım, yapmak istediğim şifre girilmesi fakat bu şifrenin sadece int içermesi, yanlılıkla str girerse hata verip tekrardan int girmeye yönlendirmesi.

dene = int(input("Lütfen şifrenizi giriniz : "))
print("Girdiğiniz Şifre: ", dene)

if dene == 8:
print(“Doğrudur”)
if dene != 8:
print(“yanlış tekrar dene”)
if type (dene) == str:
print(“sayı giriniz”)

buna son if yerine else veya elif ile deneme yapıyorum yine hata veriyor.

Soru sorarken Kodlarınızı, kod bloğu içerisnde yazarsanız doğru görüntülenir ve daha anlaşılır olur.

Aşağıdaki kod istediğini sağlar diye düşünüyorum tabi çok daha temiz, pratik kodlar da yazılabilir.

while True:
    try:
        dene = int(input("Lütfen şifrenizi giriniz : "))
        if type(dene) == int:
            print("Girdiğiniz Şifre: ", dene)
            if dene == 8:
                print("Girdiğiniz Şifre Doğru")
                break
            else:
                print("Girdiğiniz Şifre Yanlış, Lütfen Tekrar Deneyin; ")

    except:
        print("Sadece Rakam Girmelisiniz.")
1 Beğeni

try
except
denemiştim

try:
dene= int(dene)
break
except:
print(“Lütfen sayı giriniz”)

fakat ben son kısımdaki if olan yerde denemişim hata vermişti, okuyup deneye deneye öğreneceğiz inşallah, çok teşekkür ederim istediğim gibi çalıştı.

Rica ederim,
insan bazen konuları okuyunca anlatılanı tam olarak anlayamıyor / kavrayamıyor.
Konu hakkında kodları incelediğinde ya da kendisi kod yazmaya çalıştığında daha anlaşılır oluyor.
try, except bloğunu/yapısını ilk okuduğumda anladım sanmıştım ama kod yazmaya çalıştığımda anlamadığım ortaya çıkmıştı.
O nedenle bol bol pratik lazım.

Kesinlikle haklısınız hocam, insan okuyup düz aynısını yazınca akılda kalmıyor, fakat bir şey yapmaya çalışıp, uğraşıp, sonuçlarını alınca, yapılan hata ders oluyor, bunu aslında kullanacağım bir yer yok, aklıma geldi, şimdiye kadar okuduğum ile böyle bir şey yapsam diye denemek istedim, derken saplanıp kaldım, inat ettim, :slight_smile:
dünden beri bir sürü kombinasyon denemiştim, kopya da çekmek istemedim ezbere iş yapmış olmayayım kendim çözeyim diye, fakat en son çıkmaza düşünce fazlalıkları silip sormak ve çözüme gitmeyi tercih ettim, şimdi aklımda daha kalıcı oldu, elinize sağlık, teşekkür ederim.

bkz: Soru Sorarken Sıkça Düşülen Hatalar #1

try ile except’in arasini mumkun oldugunca kisa tutmak lazim oldugu icin bunu yukaridakine tercih ederim ama ikisi de hangi exception’larin yakalanacagini belirlememis, alakasiz istisnai durumlari da “rakam girmedi” olarak gorebiliyor. Ciplak except: hemen her zaman hatali bir kod.

2 Beğeni

Hocam öncelikle bilgilendirme için teşekkür ederim, size göre dizilim nasıl olmalı ?, ben acemiyim daha yeni öğreniyorum, bir şeyler öğrenene kadar bir çok hatam olacaktır daha, try except ise yazbelde baktığım derste ne nedir ve ne yapıyor diye hızlıca bakınca bunu kullanabilirim diye denediğim bir dizilimdi, kullanmayı düşündüm beceremedim, @m.halil hocam ise çözüme onunla gitti.

Hocam bunun bir alternatifi daha vardı, ismini unuttum.

Haklısınız @aib hocam,
YazBel Belgelerinde try, except bloğunun kullanım şekli aşağıdaki şekilde gösterilmiş.

try:
    hata verebileceğini bildiğimiz kodlar
except HataAdı:
    hata durumunda yapılacak işlem

Ayrıca, YazBel belgelerinde ;

Biliyoruz ki, bir veriyi sayıya dönüştürmek istediğimizde eğer kullanıcı sayı değerli bir veri yerine harf değerli bir veri girerse programımız çöker.
… veri dönüştürme işlemi sırasında kullanıcının uygun olmayan bir veri girmesi halinde üretilecek hata bir ValueError’dır. Dolayısıyla except bloğu içine yazacağımız hata türünün adı da ValueError olacaktır. O yüzden ValueError adlı hatayı yakalayabilmek için şu satırları yazdık:

ifadeleri bulunmaktadır.

Veri dönüştürme işleminde kullanıcının uygun olmayan bir veri girmesi halinde üretilecek hata için ValueError,
ifadesini eklemek gerekiyor.

while True:
    try:
        dene = int(input("Lütfen şifrenizi giriniz : "))
        if type(dene) == int:
            print("Girdiğiniz Şifre: ", dene)
            if dene == 8:
                print("Şifre Doğru.")
                break
            else:
                print("yanlış tekrar dene")

    except ValueError:
        print("Sadece Rakam Girmelisiniz.")
1 Beğeni

Regular Expression kullanabilirsin.