Python中的简单登录功能

问题描述 投票:1回答:4
def login():    
    user = raw_input("Username: ")
    passw = raw_input("Password: ")
    f = open("users.txt", "r")
    for line in f.readlines():
        us, pw = line.strip().split("|")
        if (user in us) and (passw in pw):
            print "Login successful!"
            return True
    print "Wrong username/password"
    return False

def menu():
    #here's a menu that the user can access if he logged in.

def main():
    login()
    log = login()
    if log == True:
         menu()

而users.txt是:

john22|1234
max2|2211
jack6|1551

问题是,当我运行该程序并输入正确的用户名和密码时,它会打印出“登录成功!”但它不会继续进入menu()。相反,它再次显示“用户名:”和“密码:”。但是,当我再次输入正确的用户名和密码(与users.txt相同或不同)时,它将进入menu(),并且一切正常。所以我的猜测是,由于某种原因,您必须输入两次正确的信息,而我不希望这样。我到处搜索,但我不知道为什么会这样...

python function login readlines
4个回答
2
投票

您两次调用login()函数。只有第二个调用使用返回值,因此您可以删除第一个调用

def main():
    login()         # <--- Remove this one
    log = login()

您可能想考虑使用的是getpass。在密码字段中使用该密码代替getpass将阻止在屏幕上显示密码。

raw_input

其余代码的行为相同,但是在控制台上,输出看起来像这样:

import getpass

...

def login():
    ...
    passw = getpass.getpass("Password: ")

尽管输入了有效的密码,但请注意,“ Password:”行为空


1
投票

这里的问题是您在Username: max2 Password: Login successful! 上两次呼叫login()。要修复您的错误,只需删除第一个调用,因为甚至没有使用返回。另外,我不确定是否打算这样做,但是:

main

即使(us,pw)是('username','password'),也会匹配('user','pass')。请使用if (user in us) and (passw in pw): 运算符。

至少,您应该考虑更改:

==

到:

us, pw = line.strip().split("|")

仅将行拆分一次,否则密码将不能包含us, pw = line.strip().split("|", 1)


1
投票

问题是有两个login()实例被调用。以下代码将重复登录,直到正确为止:

|

0
投票

[thx thx thx thx thx thx这30个字符了吗?

© www.soinside.com 2019 - 2024. All rights reserved.