繁体   English   中英

Python登录系统

[英]Login system on Python

这是一个真正的新手问题。 因此,我正在尝试在Python中编写一个登录系统,要求输入用户名(仅提供1个用户名),如果键入的用户名不正确,则说明用户名无效,如果正确,则要求输入用户名。密码,如果密码不正确,则表示密码错误,然后再次要求输入密码;如果输入的密码正确,则仅表示已登录。

到目前为止,我能够做的是:

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

尽管用户输入了错误的密码,但它确实执行了我不希望执行的操作,但它确实可行。 如果用户输入了错误的密码,我希望程序告诉用户“错误的密码”并再次要求输入,但是它没有这样做,它只会打印“错误的密码”,然后终止。 不过,它在要求用户名的那部分工作100%。

这是我想念的一件事。 我怎样才能解决这个问题? 非常感谢!

每当用户输入错误的密码时,语句b = b + 1就会终止while循环。 确实没有必要。

您也可以将密码提示包装在while循环中:

while input("Enter password") != "1234":
    print("Password incorrect")

检查密码时不需要+ 1 那只是使您脱离循环。

相反,请尝试:

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

一个更好的解决方案是使用布尔值,而不是使用+1<1来打破循环。 样品:

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.')

输入无效密码后,此循环( while b < 1: )终止。

看着

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

代码行b = b + 1使得while b < 1:时为假,从而结束了循环并终止了程序。

正如其他人已经指出,问题出在b = b + 1打破了条件while b < 1:使其不要问另一个密码。 简单删除行b = b + 1

是否想做得更好?

使用getpass()而不是input()避免“过肩”攻击。 您的密码输入被屏蔽为****
恩。

from getpass import getpass
password = getpass()

Cryptify
嗯,除了听起来很酷之外,这并没有真正阻止某些人修改代码以跳过密码阶段,但是可以阻止他们看到代码中的原始密码。

这篇文章使用passlib有一个很好的例子

这有助于保护非唯一/敏感的密码(例如您用于5倍其他密码的密码,或者您母亲的娘家姓……请勿将其拖入其中)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM