【问题标题】:Can't compare input variables to those from a file无法将输入变量与文件中的变量进行比较
【发布时间】:2018-09-07 09:16:43
【问题描述】:

我正在为我的项目创建一个登录系统,我将用户名和密码存储在一个文本文件中,第一列中包含用户名,第二列中包含密码,然后用新行分隔每个登录名/密码并使用: 作为用户名/密码之间的障碍。

输入正确的用户名和密码后,我总是得到不正确的登录信息,但是如果我只将用户名与文件进行比较,它就可以正常工作。即使我直接从文件中打印密码和用户名,然后将其打印在我输入的用户名/密码旁边,它仍然完全相同,但仍然显示登录错误!

def login():
file=open("user.txt","r")
user=input("enter usename")
password=input("enter password") 
Check=False
for line in file:
    correct=line.split(":")
    if user==correct[0] and password==correct[1]:
        Check=True
        break
if Check==True:
    print("succesffuly logged in")
    file.close()
    mainMenu()
else:
    print("incorrect log in")
    file.close()
    login()

【问题讨论】:

    标签: python python-3.x file validation


    【解决方案1】:

    我怀疑您在每个用户/密码字符串的末尾都有一个\n。我怀疑line 在被读入后看起来像user:pass\n。使用line.strip().split(':') 删除换行符,这会导致password==correct[1] 失败。

    替换:

    for line in file:
        correct=line.split(":")
    

    与:

    for line in file:
        correct=line.strip().split(":")
    

    原因见https://docs.python.org/2/library/string.html#string.strip

    string.strip(s[, chars])

    返回删除了前导和尾随字符的字符串副本。如果chars 被省略或None,空格字符被删除。如果给定而不是Nonechars 必须是字符串;字符串中的字符将从调用此方法的字符串的两端剥离。

    【讨论】:

    • 我很抱歉,但我如何在代码中实现它,我不确定你的意思
    • gyazo.com/ed0b547b65eae8d0dee2a7732992a6dc 我在尝试你的代码时遇到了这个错误,如果它改变了任何东西并且没有模块,我正在使用 python 3.5
    • 使用line.strip().split(":"),而不是line.strip().line.split(":")
    • 啊,是的!非常感谢您的耐心和答案意味着很多!
    • 请记住,strip 将删除 all 空格。如果您的密码以任何其他空格结尾,您就会遇到问题。
    【解决方案2】:

    我们可以使用in 进行检查

    def login():
        file = open("user.txt", "r")
        user = input("enter usename ")
        password = input("enter password ")
        if ('{0}:{1}'.format(user, password)) in file:
            print('yay') 
        else:
            print('Boo !! User not found')
    
    login()
    

    如果你想使用 for 循环,我建议:

    def login():
        file = open("user.txt", "r")
        user = input("enter usename ")
        password = input("enter password ")
        for line in file:
            temp_user, temp_password = line.strip().split(':')
            if temp_user == user and temp_password == password.strip():
                print('yay')
            else:
                print('boo username and password not found!')
    
    
    login()
    

    非常重要,警告! 请采取必要的安全措施,因为此代码不提供任何安全措施,存在许多可以利用的漏洞。没有散​​列函数而且Python本身不提供很多安全性,我建议使用getpass.getpass解释HERE

    【讨论】:

    • 您可以使用in来检查整个文件中是否存在字符串?
    • 输入正确的用户名和密码时仍然得到错误的结果
    • gyazo.com/df0f18cd93d9d6a380e8129fe0ff1643 这是我在尝试第二种方法时得到的结果,由于某种原因仍然出错
    • 当然,不用担心,但是,我会留下警告,但强烈建议sean 研究这个主题。 @sean 一秒。
    • 是的,Drise 我们可以使用in 来检查整个字符串或文件。这是对 in 所做工作的精彩描述 stackoverflow.com/a/19775766/6929467
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 2016-08-26
    • 2020-10-20
    • 2020-02-08
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多