首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的简单登录函数

Python中的简单登录函数
EN

Stack Overflow用户
提问于 2015-02-13 00:48:34
回答 3查看 16.5K关注 0票数 3
代码语言:javascript
复制
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是:

代码语言:javascript
复制
john22|1234
max2|2211
jack6|1551

问题是,当我运行程序并输入正确的用户名和密码时,它打印出"Login successful!“但它不会继续出现在menu()中。相反,它会再次显示"Username:“和"Password:”。但是,当我再次输入正确的用户名和密码(与users.txt相同或不同)时,它会进入菜单(),并且一切正常。所以我的猜测是,出于某种原因,你必须输入正确的信息两次,而我不想这样。我到处找了,但我不明白为什么会这样。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-02-13 00:56:11

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

代码语言:javascript
复制
def main():
    login()         # <--- Remove this one
    log = login()

您可能会考虑使用getpass。在您的password字段中使用此选项而不是raw_input将阻止密码显示在屏幕上。

代码语言:javascript
复制
import getpass

...

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

然后,其余代码的行为相同,但在控制台上,输出如下所示:

代码语言:javascript
复制
Username: max2
Password:
Login successful!

请注意,尽管输入了有效的密码," password :“行仍为空

票数 3
EN

Stack Overflow用户

发布于 2015-02-13 00:58:21

这里的问题是,您在main中调用了login()两次。要修复您的错误,只需删除第一个调用,因为返回甚至都没有使用。另外,我不确定这是否是故意的,但是:

代码语言:javascript
复制
if (user in us) and (passw in pw):

将匹配('user','pass'),即使(us,pw)是('username','password')。改用==运算符。

至少有一件事,你应该考虑改变:

代码语言:javascript
复制
us, pw = line.strip().split("|")

至:

代码语言:javascript
复制
us, pw = line.strip().split("|", 1)

它只将该行拆分一次,否则密码将无法包含|

票数 1
EN

Stack Overflow用户

发布于 2015-02-13 01:04:06

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

代码语言:javascript
复制
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():
    global True
    while True:
        True = True
        log = login()
        if log == True:
             menu()
             True = False


main()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28483113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档