To naprawdę nowe pytanie. Próbuję więc kodować system logowania w Pythonie, gdzie prosi o nazwę użytkownika (tylko 1 dostępna nazwa użytkownika), jeśli nazwa użytkownika wpisana jest nieprawidłowo, mówi, że nazwa użytkownika jest nieprawidłowa, jeśli jest poprawna, prosi o to Hasło, jeśli hasło jest nieprawidłowe, mówi nieprawidłowe hasło i wpływa, aby ponownie poprosić o hasło, a jeśli hasło wpisane jest poprawne, po prostu mówi się zalogowany.

Do tej pory mogłem zrobić to:

a = 0

 while a < 1:             
     print ('Username:')  
     name = input()
     if name != 'Teodor': #checks the username typed in
         print ('Invalid username.') 
         continue
     else:
         print ('Hello, Teodor.')
         print ('Password:')
         a = a + 1

 password = input()

 b = 0
      while b < 1:
     if password != '1234': #checks the password typed in
         print ('Password incorrect.')
         b = b + 1
         continue

     else:
         print ('Password correct.')
         print ('Logging in...')
         print ('Logged in.')
         break

Działa to, choć robi coś, czego nie chcę, jeśli typy użytkowników w nieprawidłowym hasła. Jeśli typy użytkowników w nieprawidłowym haśle, chciałem, aby program był informujący użytkownika "Nieprawidłowe hasło" i przejdź do ponownego poproś o to jeszcze raz, ale nie robi tego, po prostu drukuje "nieprawidłowe hasło", a następnie kończy się . Pracuje w 100% ze strony, w której prosi o nazwę użytkownika.

To trochę tego, czego brakuje. Jak mogę to naprawić? Wielkie dzięki!

2
T. Licht 27 czerwiec 2017, 03:02

4 odpowiedzi

Najlepsza odpowiedź

Oświadczenie b = b + 1 kończy pętlę while za każdym razem, gdy użytkownik wprowadza nieprawidłowe hasło. Naprawdę nie ma potrzeby.

Możesz alternatywnie po prostu zawiń monit hasła w pętli while:

while input("Enter password") != "1234":
    print("Password incorrect")
2
ILostMySpoon 27 czerwiec 2017, 01:43

Gdy inni już wskazali, problem leży b = b + 1 łamanie warunku while b < 1:, powodując, że nie poprosi o inne hasło. Prosty usuń linię b = b + 1

Chcesz to poprawić?

Unikaj ataku "Over-the-ramię" getpass() zamiast input(). Wejście hasła jest zamaskowane jako ****
dawny.

from getpass import getpass
password = getpass()

kryptify
Cóż, oprócz brzmienia fajne, to naprawdę nie powstrzymuje nikogo z modyfikowania kodu, aby pominąć obok fazy haseł - ale może je powstrzymać przed zobaczenie surowego hasła w kodzie.

Ten post ma dobry przykład przy użyciu passlib

Pomaga to chronić nieźcznych / wrażliwych haseł (jak hasło, którego używasz do 5x innych rzeczy, lub nazwę panieńskiej matki ... nie przeciągaj jej do tego)

0
Alter 27 czerwiec 2017, 01:08

Ta pętla (while b < 1:) kończy się w momencie wprowadzenia nieprawidłowego hasła.

Patrzeć na

>     if password != '1234': #checks the password typed in
>         print ('Password incorrect.')
>         b = b + 1
>         continue

Linia kodu b = b + 1 sprawia, że jest taka, że while b < 1: staje się fałszywe, kończąc w ten sposób pętlę i zakończenie programu.

0
EyuelDK 27 czerwiec 2017, 00:07

Nie ma potrzeby, aby + 1 podczas sprawdzania hasła. To właśnie przerywa cię z pętli.

Zamiast tego spróbuj:

if password != '1234': #checks the password typed in
         print ('Password incorrect.')
         continue

Znacznie lepsze rozwiązanie, zamiast używać +1 i <1 do wyrwania się z pętli jest użycie booleanów. Próba:

userCorrect = False
while not userCorrect:
    print ('Username:')
    name = raw_input()
    if name != 'Teodor': #checks the username typed in
        print ('Invalid username.')
        continue
    else:
        print ('Hello, Teodor.')
        print ('Password:')
        userCorrect = True

password = raw_input()

passCorrect = False
while not passCorrect:
    if password != '1234': #checks the password typed in
        print ('Password incorrect.')
        print ('Password:')
        password = raw_input()
    else:
        passCorrect = True
# Since password is correct, continue.
print ('Password correct.')
print ('Logging in...')
print ('Logged in.')
1
Vaibhav Bajaj 27 czerwiec 2017, 00:12