Python中的简单用户名和密码应用程序

时间:2013-04-06 02:38:27

标签: python python-2.7

我正在尝试使用字典构建一个简单的登录和密码应用程序。它工作正常,除了检查登录是否与密码匹配的部分(在底部显示“登录成功!”)。

如果我要创建登录'a'和密码'b',然后创建登录'b'和密码'a',如果我尝试使用登录'a'和密码登录,它会登录我一个'。它只是检查字典中某些字符是否存在,但如果它们是一对则不存在。

有任何建议如何解决这个问题?

users = {}
status = ""

while status != "q":
    status = raw_input("Are you a registered user? y/n? Press q to quit: ")  

    if status == "n": #create new login
         createLogin = raw_input("Create login name: ")

         if createLogin in users: # check if login name exist in the dictionary
             print "Login name already exist!\n"
         else:
             createPassw = raw_input("Create password: ")
             users[createLogin] = createPassw # add login and password
             print("\nUser created!\n")     

    elif status == "y": #login the user
        login = raw_input("Enter login name: ")

        if login in users:
           passw = raw_input("Enter password: ")
           print

           if login in users and passw in users: # login matches password
               print "Login successful!\n"

        else:
            print
            print("User doesn't exist!\n")

修改

现在这是有效的,我试图将应用程序划分为三个函数,以便于阅读。它有效,除了我得到无限循环。

有什么建议吗?

users = {}
status = ""

def displayMenu():
    status = raw_input("Are you a registered user? y/n? Press q to quit: ")  
    if status == "y":
        oldUser()
    elif status == "n":
        newUser()

def newUser():
    createLogin = raw_input("Create login name: ")

    if createLogin in users: # check if login name exists
        print "\nLogin name already exist!\n"
    else:
        createPassw = raw_input("Create password: ")
        users[createLogin] = createPassw # add login and password
        print("\nUser created!\n")     

def oldUser():
    login = raw_input("Enter login name: ")
    passw = raw_input("Enter password: ")

    # check if user exists and login matches password
    if login in users and users[login] == passw: 
        print "\nLogin successful!\n"
    else:
        print "\nUser doesn't exist or wrong password!\n"

while status != "q":            
    displayMenu()

5 个答案:

答案 0 :(得分:3)

目前您正在检查指定的密码passw是否与users中的任何匹配(不正确)。您需要查看输入的密码是否与特定用户的密码相匹配。由于您已经检查过字典键中是否存在用户名,因此您无需再次检查,因此请尝试以下操作:

if passw == users[login]:
    print "Login successful!\n"

编辑:

对于您更新的代码,我将假设“无限循环”,您的意思是您不能使用q退出程序。这是因为当您在displayMenu内时,您将用户输入保存在名为status本地变量中。此本地变量引用您正在检查的同一status

while status != "q": 

换句话说,您在两个不同的范围中使用变量status(更改内部范围不会更改外部)。

有很多方法可以解决这个问题,其中一种方法就是改变,

while status != "q":
    status = displayMenu()

displayMenu末尾添加一个return语句,如此,

return status

通过执行此操作,您将status的新值从displayMenu的本地范围保存到脚本的全局范围,以便while循环可以正常工作。

另一种方法是将此行添加到displayMenu的开头,

global status

这告诉Python status中的displayMenu引用了全局范围的status变量,而不是新的本地范围变量。

答案 1 :(得分:1)

更改

if login in users and passw in users: # login matches password

if users[login] == passw: # login matches password

此外,你不应该告诉黑客“用户不存在!”。更好的解决方案是告诉一般的原因:“用户不存在或密码错误!”

答案 2 :(得分:0)

如果您将此密码放在网上,请加密您在数据库中的密码。 干得好。

import md5
import sys
# i already made an md5 hash of the password: PASSWORD
password = "319f4d26e3c536b5dd871bb2c52e3178" 
def checkPassword():
    for key in range(3):
        #get the key
        p = raw_input("Enter the password >>")
        #make an md5 object
        mdpass = md5.new(p)
        #hexdigest returns a string of the encrypted password
        if mdpass.hexdigest() == password:
            #password correct
            return True
        else:
            print 'wrong password, try again'
    print 'you have failed'
    return False

def main():
    if checkPassword():
        print "Your in"
        #continue to do stuff

    else:
        sys.exit()
if __name__ == '__main__':
    main()

答案 3 :(得分:0)

usrname = raw_input('username   :     ')
if usrname == 'username' :
    print 'Now type password '

else :
    print 'please try another user name .this user name is incorrect'


pasword = raw_input ('password     :    ')
if pasword  == 'password' :
    print ' accesses granted '
    print ' accesses granted '
    print ' accesses granted '
    print ' accesses granted '
    print 'this service is temporarily unavailable'

else :
    print 'INTRUDER ALERT !!!!' , 'SYSTEM LOCKED'
    print 'INTRUDER ALERT !!!!' , 'SYSTEM LOCKED'
    print 'INTRUDER ALERT !!!!' , 'SYSTEM LOCKED'
    exit()

答案 4 :(得分:0)

这是一个非常简单的基于前一个用户,具有改进的语法和错误修复:

print("Steam Security Software ©")
print("-------------------------")
print("<<<<<<<<<Welcome>>>>>>>>>")
username = input("Username:")
if username == "username" :
    print ("Now type password")

else :
    print ("please try another user name. This user name is incorrect")


password = input ("Password:")
if password  == "password" :
    print ("ACCESS  GRANTED")
    print ("<<Welcome Admin>>")
    #continue for thins like opening webpages or hidden files for access

else :
    print ("INTRUDER ALERT !!!!" , "SYSTEM LOCKED")
    exit()