While Döngüsünün iki koşulun aynı anda sağlanması durumunda durması

Merhabalar aşağıdaki fonksiyonda döngünün durması için hem kullanıcı adının hem de parolanın doğru girilmesi koşulunu sağlamaya çalıştım. AND operatörü ile bu işin yapabileceğini düşündüm ama sanki OR operatörü kullanışım gibi koşullardan biri bile TRUE dönse döngü sonlanıyor. AND operatöründe 2 koşulunda sağlanması gerekiyor sonucun TRUE dönmesi için ama benim fonksiyonda bu işe yaramadı bir yerde hata yapıyorum. While döngüsünün durması hem kullanıcı adı hemde parolanın aynı zamanda doğru yazılması koşuluna nasıl bağlanabilir. Yardımlarınız için teşekkür ederim.

username = "Doruk2003"
password = "171717"


def username_access():
    if input_username == "exit":
        print("Çıkış yapıldı...")
    elif username != input_username:
        print("Kullanıcı adı hatalı.")
    else:
        print("Kullanıcı adı doğru.")

    if input_password == "exit":
        print("Çıkış yapıldı...")
    elif password != input_password:
        print("Parola Hatalı")
    else:
        print("Parola Doğru.")


input_username = ""
input_password = ""

while input_password != password and input_username != username:
    input_username = input("Kullanıcı adınızı giriniz. : ")
    input_password = input("Parolanızı giriniz. : ")
    username_access()

Hayırlı sabahlar🌚

Buradaki != leri == yaparsan program amacına uygun çalışır gibi.

Ek yorum:

Şifre kontrol mekanizmanı pek beğenmedim. Şu mekanizma da takip edilebilir idi belki (ben oluşturdum.)

def control ():
    if (username and password is correct):
        print("username and password correct")
    else:
        print ("invalid login")
        exit(0)

while (1):
    control ()
    #some process

gibi bir pseudo olabilir.

Şifre kontrol mekanizması ile ilgilenmiyorum onun için baştan savma oldu biraz burda amacım while döngüsünü 2 koşula bağlamaktı. Dediğiniz gibi yaptığımda zaten hiç çalışmıyor kod.

username = "Doruk2003"
password = "171717"


def username_access():
    if input_username == "exit":
        print("Çıkış yapıldı...")
        exit(0)
    elif username != input_username:
        print("Kullanıcı adı hatalı.")
    else:
        print("Kullanıcı adı doğru.")

    if input_password == "exit":
        print("Çıkış yapıldı...")
        exit(0)
    elif password != input_password:
        print("Parola Hatalı")
    else:
        print("Parola Doğru.")


input_username = ""
input_password = ""

while input_password != password or input_username != username:
    input_username = input("Kullanıcı adınızı giriniz. : ")
    input_password = input("Parolanızı giriniz. : ")
    username_access()

Ben böyle bir şey yaptım uygun olur mu? while da or kullanmak daha mantıklı. Çünkü biz anladığım kadarıyla hem şifre hem de kullanıcı adı doğru olursa while dan çıkmaya çalışıyoruz. Mantık dersi aldıysanız De Morgan amcayı da anımsatayım :slight_smile:

değil (şifre doğru ve kullanıcı doğru) <=> sifre yanlış veya kullanıcı yanlış

(iğrenç bir syntax oldu kusura bakmayın :ğ)

OR kullanımında koşullardan herhangi biri doğru olduğunda True dönüyor bu kullanım amacına uygun değil. Burda kullanım için dediğiniz gibi sadece her iki koşulunda TRUE dönmesi durumunda döngüden çıkılması gerekiyor. Password ve username doğru olduğunda döngüden çıkmak diğer hertürlü koşulda döngünün sürmesini sağlamaya çalışıyorum.

Kodu çalıştırdıniz mi? ( exit exit yazınca çıkıyor bu arada)

Allah allah OR ile denememiştim hiç çünkü dediğim gibi ben 2 koşulunda sağlanması gerekliliği durumundan dolayı AND kullanıyordum. OR nasıl oluyor da burda doğru koşul operatörü oluyor hiç anlamadım.

Yukarıda yazdım ya,

Eğer bir kullanıcının hem username i hem de password u doğru değilse: kullanıcının username’i veya(or) kullanıcının password’u yanlıştır.

Eğer yazdığım koddaki or’u and olarak değiştirseydik username yanlış ve(and) password doğru olsaydı döngüden çıkmaması gerekirken döngüden çıkardı.

1 Beğeni

Kafa yeni dank etti Koşul sağlandığı müddetçe While devam ediyordu. Vaktini aldım kusura bakma. Çok teşekkürler.

username = "Doruk2003"
password = "171717"


def username_access():
    if username != input_username:
        print("Kullanıcı adı hatalı.")
    else:
        print("Kullanıcı adı doğru.")

    if password != input_password:
        print("Parola Hatalı")
    else:
        print("Parola Doğru.")


input_username = ""
input_password = ""

while input_password != password or input_username != username:
    input_username = input("Kullanıcı adınızı giriniz. : ")
    if input_username == "exit":
        print("Çıkış yapıldı")
        break
    input_password = input("Parolanızı giriniz. : ")
    if input_password == "exit":
        print("Çıkış yapıldı")
        break
    username_access()

Estağfurullah, vakit harcanacaksa böyle harcanmali

Önemli değil.