Giriş ara yüzü yapma

Merhabalar. Daha yeni yeni python öğreniyorum o yüzden cevaplarınızı buna göre belirlerseniz çok sevinirim.
Basit bir Kullanıcı adı - Şifre ara yüzü yaptım. kodlar şöyle :

sys_kullacı_adı = str(input("Kullanıcı Adı :"))
if sys_kullacı_adı == "Volkan":
    print("Kullanıcı adı doğru")
else:
    print("Kullanıcı adı hatalı lütfen tekrar deneyiniz.")
    sys_kullacı_adı = (input("Kullanıcı Adını Tekrar Gir :"))

şifre = input("Şifre :")
if şifre == "VÖ19":
    print("Giriş Yapıldı.")
else:
    print("Şifre Hatalı. Lütfen tekrar deneyin :")
    şifre = input("Şifre :")

import datetime
tarih = datetime.datetime.now()

Benim şuanda yapmak istediğim, ama rehberlerde şuan için göremediğim bir şey istiyorum. İsteğim şu:

Kullanıcı parolasını 3 kere yanlış girdikten sonra işlem yapması kesilsin.
Benim koda bakacak olursanız kişinin 2.denemesi yanlış bile olsa karşısına "Şifre : " ibaresi çıkıyor ama ben böyle olmasını istemiyorum. Bana “İşleminiz sona ermiştir.” diyip herhangi bir mudahele yapamamasını istiyorum. Sanki kod satırı bitmişte kod gelmiyor gibi.

Umarım anlatabilmişimdir isteğimi…

1 Beğeni

Merhaba.
Bu tür girdi (input) alma işlemlerinde genel olarak döngüleri kullanırız.

for deneme in range(2, -1, -1):
    sys_kullanici_adi = input("Kullanıcı Adı: ")
    if sys_kullanici_adi == "Volkan":
        print("Eşleşme Başarılı!")
        break
    else:
        if deneme == 0:
            print("Eşleşme Başarısız! Deneme hakkınız kalmadı. Sistemden çıkış yapılıyor...")
            quit()
        else:
            print("Eşleşme Başarısız! Lütfen tekrar deneyiniz. Kalan deneme hakkı:", deneme)

for deneme in range(2, -1, -1):
    sifre = input("Şifre: ")
    if sifre == "VÖ19":
        print("Eşleşme Başarılı!")
        break
    else:
        if deneme == 0:
            print("Eşleşme Başarısız! Deneme hakkınız kalmadı. Sistemden çıkış yapılıyor...")
            quit()
        else:
            print("Eşleşme Başarısız! Lütfen tekrar deneyiniz. Kalan deneme hakkı:", deneme)

*Yukarıdaki for döngüsünde range() içerisinde parametre olarak (2, -1, -1) kullandık. Bunu şöyle açıklayabiliriz.

-range() dediğimiz şey, belirli bir aralık içerisinde sayılar oluşturur ve bu sayıları bir liste içerisine yerleştirir.

-Mesela range(5) aslında [0, 1, 2, 3, 4] şeklinde bir listedir. Buradaki 5 sayısı, anlaşılacağı üzere üst sınır olarak kullanılmıştır.

-Peki ya alt sınır belirtmek istersek? Cevap basit, range(1, 5) yaptığımızda bu sefer elde edeceğimiz liste [1, 2, 3, 4] şeklinde olacaktır.

-Peki biz bu listede aralarındaki fark yalnızca 1 olan sayılar mı elde edebiliriz? Elbette hayır.
range(1, 5, 2) yaptığımızda, buradaki 2 sayısı bizim artış değerimiz olur ve bu sefer [1, 3] şeklinde bir liste elde ederiz.

-İşin güzel yanı şu ki, alt sınır ile üst sınırın yerini değiştirip, artış değerini de negatif bir değer olarak girdiğimizde, büyükten küçüğe doğru giden bir liste elde edebiliyoruz. Mesela yukarıdaki kodda yer alan range(2, -1, -1) aslında [2, 1, 0] şeklindeki bir listedir.

*Şimdi bu listenin for döngüsü içerisinde kullanılmasını açıklayalım.

-for deneme in range(2, -1, -1) demiştik. Bunu şu şekilde biraz açalım. range(2, -1, -1) = [2, 1, 0] olduğundan ötürü bu döngü şu şekilde de yazılabilir: for deneme in [2, 1, 0]. Burada deneme isimli değişken, [2, 1, 0] şeklindeki listede sırasıyla gezecektir.

-Peki ne demek bu? Şöyle ki sırayla:

deneme = 2
deneme = 1
deneme = 0

olacaktır.

-Peki bu sıra neye bağlı? Döngü her tamamlanışında başa dönecektir ve her başa dönüşünde de liste içerisinde yer alan bir sonraki değeri baz alacaktır. Eğer ki listenin sonuna gelindiyse bu sefer döngü bitecektir.

-Yani döngünün başında deneme = 2 olup buna göre işlemler yapılırken, bir sonraki ‘iterasyonda’ ise deneme = 1 olup buna göre işlemler yapılacaktır ve nihayet deneme = 0 olup da yine buna göre işlemler yapıldıktan sonra döngü sonlanacaktır.

*Python’da yeni olduğunuz için böyle uzun uzun açıklama gereği duydum, umarım anlaşılır ve doğru bir şekilde açıklamışımdır. İyi çalışmalar dilerim.

Ek Tavsiyeler:

  • input() ile alınan girdiler zaten str yani string tipinde olacaktır. Bu yüzden yazı olarak bir girdi alacağınız zaman str(input()) yerine doğrudan input() kullanabilirsiniz.

  • print("Eşleşme Başarısız! Lütfen tekrar deneyiniz. Kalan deneme hakkı:", deneme)
    yerine f-string kullanabilirsiniz. f-string’lerde süslü parantez ‘{}’ içerisine, yazı içerisinde yer almasını istediğiniz değişkenleri yazabilirsiniz.
    print(f"Eşleşme Başarısız! Lütfen tekrar deneyiniz. Kalan deneme hakkı: {deneme}")

  • Döngülerin yanı sıra ‘fonksiyonlar’ üzerinde de çalışmanızı öneririm. Girdi almayı her istediğimizde bu döngüleri tekrar tekrar oluşturmak istemiyorsak, bu döngüleri bir fonksiyon içerisine yerleştirebiliriz. Mesela;

def giris_icin_girdi_al():
    for deneme in range(2, -1, -1):
        sys_kullanici_adi = input("Kullanıcı Adı: ")
        if sys_kullanici_adi == "Volkan":
            print("Eşleşme Başarılı!")
            break
        else:
            if deneme == 0:
                print("Eşleşme Başarısız! Deneme hakkınız kalmadı. Sistemden çıkış yapılıyor...")
                quit()
            else:
                print(f"Eşleşme Başarısız! Lütfen tekrar deneyiniz. Kalan deneme hakkı: {deneme}")

    for deneme in range(2, -1, -1):
        sifre = input("Şifre: ")
        if sifre == "VÖ19":
            print("Eşleşme Başarılı!")
            break
        else:
            if deneme == 0:
                print("Eşleşme Başarısız! Deneme hakkınız kalmadı. Sistemden çıkış yapılıyor...")
                quit()
            else:
                print(f"Eşleşme Başarısız! Lütfen tekrar deneyiniz. Kalan deneme hakkı: {deneme}")
                
giris_icin_girdi_al()
giris_icin_girdi_al()

-Burada giris_icin_girdi_al isimli bir fonksiyon tanımladık. def giris_icin_girdi_al()

-Bundan sonra kullanıcı adı ve şifre için girdi almak istediğinizde bu giris_icin_girdi_al fonksiyonunu giris_icin_girdi_al() yazarak çağırabiliriz.

Edit: break komutundan bahsetmeyi unutmuşum. Döngüleri istediğimiz bir yerde durdurmak için break komutunu kullanırız. Mesela şifre doğru girildiğinde, yeniden şifre sormaması için döngüyü break ile sonlandırıyoruz.

4 Beğeni

Hocam vakit ayırdığınız için çok teşekkür ederim. Dediğinizi yapıp fonksiyon kısmına yöneleceğim. Daha yeni olduğum için öğrendiğim kodları başka yerlerde kullanmayı deniyorum sürekli.

Bu programda bir hamleyi birden fazla metotla yapılabileceğimizi gördüm.
Kendi basit hesap makinemi, gelir-gider, bireysel harcama ve matematiksel işlemler gibi birkaç adet kendime ait şablonlar oluşturdum ve istediğim sonuçları alabildim. Bunu daha da geliştirmek için yeni kodlar ve metotlar öğrenmem gerek.

2 Beğeni

Daha önce hazırladığım bir kod vardı. Buna biraz bakabilirsin, hoşuna gidecek sorgular olabilir.

1 Beğeni

Hocam makaleniz gayet güzel. Şuan için yazdığınız kodların çoğunu anlamadım. Class oluşturmasını bilmiyorum daha. Dediğim gibi başlangıç seviyesindeyim mazur görün :slight_smile: Bir süre sonra anlarım diye ümit ediyorum eğer bu çalışmayla devam edersem güzel işler yapabileceğime inanıyorum. Yardımlarınızı esirgemediğinizden ötürü tekrar teşekkürler.

1 Beğeni

Estağfurullah, ne kadar vakit harcarsan o kadar emek alırsın. Devam!

1 Beğeni
import datetime

kullanici_ad = "Umut"
sifre = "1234"

def tarih_yazdir() :
    tarih = datetime.datetime.now()
    print(tarih)

hak = 3
while True :
    if 0 < hak :
        kullanici_ad_sorgu = input("Kullanici adinizi giriniz : ")
        sifre_sorgu = input("Sifrenizi giriniz : ")
        hak -= 1
        
        if sifre_sorgu == sifre and kullanici_ad_sorgu == kullanici_ad :
            print("Hosgeldiniz!")
            tarih_yazdir()
            break
        
        else :
            print(f"Yanlis bilgi girdiniz! Kalan hak : {hak}")
    
    else :
        print("Deneme hakkiniz bitmistir.")
        tarih_yazdir()
        print("-"*25)
        break

Sorun çözülmüş ama while dögüsü ile böyle de yapabilirsin. Bir de içe aktarma(import) işlemleri en üstte yapılır diye okumuştum abi. Kolay gelsin şimdiden

2 Beğeni

Hocam bugün öğrendim while komutunı ve işime epey yaradı. Yazdığınız kodları da anlamış oldum bu vesileyle. Gayet sade bir şekli var. Benim de yapmak istediğim düşünce aynen böyleydi… Vakit ayırdığınız için teşekkürler.

1 Beğeni