Python parola giriş ekranı oluşturma

WhiteWolf

Hectopat
Katılım
14 Ekim 2016
Mesajlar
691
Çözümler
8
Python'da parola giriş ekranı yapmak istiyorum. Yapmaya çalıştığım şey, parola ve kullanıcı adı sorularına doğru cevap verilirse "Sisteme hoşgeldiniz"; parola alanı boş bırakılırsa "parola alanı boş bırakılmaz" ve kullanıcı adı alanı boş bırakılırsa "kullanıcı adı alanı boş bırakılmaz" şeklinde çıktılar vermek. Kodları şu şekilde yazdım:

k_adı = input("Kullanıcı adı:")
parola = input("parola:")

if k_adı == "asd" and parola == "123":
print("Sisteme hoşgeldiniz.")

elif not k_adı:
print("Kullanıcı adı alanı boş bırakılmaz.")

elif not parola:
print("parola alanı boş bırakılmaz.")

else:
print("Hatalı parola veya kullanıcı adı.")

Sorun ise şu şekilde;
Kullanıcı adı ve parolayı boş bırakıp enter'a basınca "Kullanıcı adı alanı boş bırakılmaz." çıktısını veriyor. Ben sadece kullanıcı adı boş bırakılınca bu çıktıyı vermesini istiyorum. Neyi değiştirmem gerek?
 
Sadece kullanıcı adı boş bırakılıp şifre doldurulunca hata veriyor mu, direkt kapatıyor mu scripti?
Kullanıcı adını boş bırakıp şifreyi girince "Kullanıcı adı alanı boş bırakılamaz." çıktısını veriyor. Fakat benim istediğim kullanıcı adını boş bırakıp Enter'a basınca bu çıktıyı vermesi. Parolayı doldurduktan sonra değil.
 
Kodunuzda fark etmediğiniz bir hata daha vardı bu hata kullanıcı sadece boşluk karakterini kullansa bile değişkeni dolu olarak alıyordu onu da düzelttiğim kodu bırakıyorum:

Python:
while (True):
    k_adı = input("Kullanıcı Adı: ")
    parola = input("Parola: ")

    if k_adı == "asd" and parola == "123":
        print("Sisteme hoşgeldiniz.")
        break
    elif not k_adı.strip() and not parola.strip():
        print("Kullanıcı adı ve parola alanı boş bırakılamaz.")
    elif not k_adı.strip():
        print("Kullanıcı adı alanı boş bırakılmaz.")
    elif not parola.strip():
        print("Parola alanı boş bırakılmaz.")
    else:
        print("Hatalı parola veya kullanıcı adı.")

Döngü de koydum doğrusu bulunana kadar sorsun diye.
 
Python konusunda pek bilgim olmadığı için belki diğer dillerden yola çıkarım diye soruyorum. elif not ne işe yarıyor?
Hocam not ifadesini bir değişkene veri girilip girilmediğini denetlemek için kullandım. Mesela;
a="" (a'yı boş bir karakter dizisine atadık. Boş karakter dizilerinin ve sıfırın bool değeri False'dir. Bunun dışında her şeyin bool değeri True'dur.) Örneğin;
bool(8) True çıktısını verir. veya bool(" ") bu da True'dur çünkü içinde boşluk karakteri var. False olan iki şey bool(0) ve bool("") dur.

Şimdi şöyle bir şey yazalım:
x= 5
not x yazınca False çıktısı alırız.
x=0
not x yazınca True çıktısı alırız. Yani not burda "bool değerinin tam tersi" görevini görüyor. Dolu değerlerin not ifadesi False, boş değerlerin not ifadesi True oluyor. elif not derken de "eğer parola değişkeni boşsa, yani bool değeri False ise" şeklinde ifade etmeye çalıştım ama yanlışım varmış orada. Umarım anlatabilmişimdir yanlışım varsa kusura bakmayın ben de yeni sayılırım çok şey bilmiyorum Python hakkında.
Kodunuzda fark etmediğiniz bir hata daha vardı bu hata kullanıcı sadece boşluk karakterini kullansa bile değişkeni dolu olarak alıyordu onu da düzelttiğim kodu bırakıyorum:

Python:
while (True):
    k_adı = input("Kullanıcı Adı: ")
    parola = input("Parola: ")

    if k_adı == "asd" and parola == "123":
        print("Sisteme hoşgeldiniz.")
        break
    elif not k_adı.strip() and not parola.strip():
        print("Kullanıcı adı ve parola alanı boş bırakılamaz.")
    elif not k_adı.strip():
        print("Kullanıcı adı alanı boş bırakılmaz.")
    elif not parola.strip():
        print("Parola alanı boş bırakılmaz.")
    else:
        print("Hatalı parola veya kullanıcı adı.")

Döngü de koydum doğrusu bulunana kadar sorsun diye.
İlgilendiğiniz için teşekkür ederim ben henüz döngüler konusuna geçmedim öğrendikten sonra bakacağım.
 
Son düzenleme:
Hocam not ifadesini bir değişkene veri girilip girilmediğini denetlemek için kullandım. Mesela;
a="" (a'yı boş bir karakter dizisine atadık. Boş karakter dizilerinin ve sıfırın bool değeri False'dir. Bunun dışında her şeyin bool değeri True'dur.) Örneğin;
bool(8) True çıktısını verir. veya bool(" ") bu da True'dur çünkü içinde boşluk karakteri var. False olan iki şey bool(0) ve bool(") dur.

Şimdi şöyle bir şey yazalım:
x= 5
not x yazınca False çıktısı alırız.
x=0
not x yazınca True çıktısı alırız. Yani not burda "bool değerinin tam tersi" görevini görüyor. Dolu değerlerin not ifadesi False, boş değerlerin not ifadesi True oluyor. elif not derken de "eğer parola değişkeni boşsa, yani bool değeri False ise" şeklinde ifade etmeye çalıştım ama yanlışım varmış orada. Umarım anlatabilmişimdir yanlışım varsa kusura bakmayın ben de yeni sayılırım çok şey bilmiyorum Python hakkında.

İlgilendiğiniz için teşekkür ederim ben henüz döngüler konusuna geçmedim öğrendikten sonra bakacağım.
Çok teşekkürler.
 
Kullanıcı adını boş bırakıp şifreyi girince "Kullanıcı adı alanı boş bırakılamaz." çıktısını veriyor. Fakat benim istediğim kullanıcı adını boş bırakıp Enter'a basınca bu çıktıyı vermesi. Parolayı doldurduktan sonra değil.
Hocam eğer kullanıcı adı girildikten sonra "Kullanıcı adı alanı boş bırakılamaz." çıktısını vermesini istiyorsan çıktı verildikten sonra parolaya geçmesine gerek kalmaz ve programın başına dönmesi gerekir çünkü baştan uygun şartlar sağlanmamıştır. Bu yüzden de her iki alanın boş bırakılması gibi bir durum gerçekleşmez . Yazdığım kodu bir çalıştır istediğin gibi olmuş mu diye bak.
Python:
# -*- coding: cp1254 -*-
k_adi="asd"
parola="123"
while (True):
    while (True):
        inp1=raw_input("Kullanıcı Adı: ")
        if not inp1.strip():
            print("Kullanıcı adı alanı boş bırakılmaz.")
        else:
            break
    inp2=raw_input("Parola: ")
    if not inp2.strip():
        print("Parola alanı boş bırakılmaz.")
    elif not inp1==k_adi or not inp2==parola:
        print("Hatalı parola veya kullanıcı adı.")
    elif inp1==k_adi and inp2==parola:
        print("Sisteme hoşgeldiniz.")
        break
Düzeltme: 14. satırda "elif not inp1==k_adi and not inp2==parola:" kısmında and yerine or olacak sonradan gören biri için yazıyorum kodda düzelttim.
 
Son düzenleme:
Kullanıcı adı alanı boş olduğu zaman ekrana çıktı veriyor. Diğer elif ve else kısımlarına bakmıyor. İlk if den sonra başka bir if daha oluşturup, kullanıcı adı ve şifre boş mu diye bakıp, sonrasında iki elif kullanarak tek tek kullanıcı adı ve şifre boş mu diye bakmayı dener misin?
 
Uyarı! Bu konu 6 yıl önce açıldı.
Muhtemelen daha fazla tartışma gerekli değildir ki bu durumda yeni bir konu başlatmayı öneririz. Eğer yine de cevabınızın gerekli olduğunu düşünüyorsanız buna rağmen cevap verebilirsiniz.

Technopat Haberler

Yeni konular

Geri
Yukarı