无法将输入变量与文件中的变量进行比较

时间:2018-03-28 15:38:44

标签: python python-3.x file validation

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

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

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()

2 个答案:

答案 0 :(得分:5)

我怀疑每个用户/密码字符串末尾都有\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])

     

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

答案 1 :(得分: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