我的Python登录程序无法将文本文件中的单独行与用户的输入进行比较。

23 浏览
0 Comments

我的Python登录程序无法将文本文件中的单独行与用户的输入进行比较。

我希望我的登录程序能够从用户那里获取用户名和密码输入,然后检查它是否与文件中的用户名和密码相同。然而,代码不起作用,我觉得我漏掉了一些东西:

def login():
    with open("username.txt","r") as username:
        usrn_read = username.read()
        username.close()
    with open("password.txt","r") as password:
        passw_read = password.read()
        password.close()
    inp_usern = input("Username: ")
    inp_passw = input("Password: ")
    if inp_usern==usrn_read and inp_passw==passw_read:
        print("登录成功!")
        variable.open("database.txt","a")
        variable.write("成功登录的用户名: "+inp_usern)
        variable.write("密码: "+inp_passw)
        print("你的用户名和密码是:")
        print(inp_usern)
        print(inp_passw)
        forward()
    else:
        print("无效的输入。请重试。")
        inp_usern = []
        inp_passw = []
        login()
def end():
    print("谢谢!")
def forward():
    print("这将继续进行问答!")
login()

任何帮助将不胜感激!


用户名文件:

bob12

alexi90

john08


更新:

使用下面的代码它可以工作,但只能读取文本文件的第一行:

def login():
    username = open("username.txt","r")
    usrn_read = username.readline().replace('\n', '')
    username.close()
    password = open("password.txt","r")
    passw_read = password.readline().replace('\n', '')
    username.close()
    inp_usern = input("用户名:")
    inp_passw = input("密码:")
    if inp_usern==usrn_read and inp_passw==passw_read:
        print("登录成功!")
        variable = open("database.txt","a")
        variable.write("\n成功登录的用户名: "+inp_usern)
        variable.write(" 密码: "+inp_passw)
        print("你的用户名和密码是:")
        print(inp_usern)
        print(inp_passw)
        forward()
    else:
        print("无效的输入。请重试。")
        inp_usern = []
        inp_passw = []
        login()
def forward():
    print("这将继续进行问答!")
login()

以下是文件(第一个是用户名,第二个是密码,它们是单独的文件):

bob12

alexi90

bob00

alexi00

现在它可以将第一行与文件的其他行分开读取,那么如何使其能够分别读取其他行呢?谢谢!

0
0 Comments

问题的出现原因:使用了Python 2.7版本,但在代码中使用了raw_input()函数。此外,变量"variable"需要先进行赋值。

解决方法:将raw_input()函数更改为input()函数,或者升级到Python 3.x版本。同时,对变量"variable"进行赋值操作。

以下是修正后的代码:

def login():
    with open("username.txt","r") as username:
        usrn_read = username.read()
        username.close()
    with open("password.txt","r") as password:
        passw_read = password.read()
        password.close()
    inp_usern = input("Username: ")
    inp_passw = input("Password: ")
    if inp_usern==usrn_read and inp_passw==passw_read:
        print("Succesful!")
        variable = open("database.txt","a")
        variable.write("Login succesful for: "+inp_usern)
        variable.write("Password: "+inp_passw)
        print("Your username and password is:")
        print(inp_usern)
        print(inp_passw)
        forward()
    else:
        print("Not valid input. Please try again.")
        inp_usern = []
        inp_passw = []
        login()
def end():
    print("Thankyou!")
def forward():
    print("This would continue to quiz!")
login()

感谢提供的解答,原问题已得到解决。

0
0 Comments

问题的原因是使用了错误的输入函数input,应该使用raw_input函数。此外,如果输入文件中包含换行符\n,读取文件时会将换行符一同读入,导致与用户输入不匹配。解决方法是使用strip("\n")函数将换行符从字符串中去除。

具体解决方法如下:

首先,将input函数改为raw_input函数,详细原因可参考https://stackoverflow.com/a/4960216/4765841

其次,读取文件时使用strip("\n")函数去除换行符,确保与用户输入匹配。

整体代码如下:

def login():
    with open("username.txt","r") as username:
        usrn_read = username.read().strip("\n")
        username.close()
    with open("password.txt","r") as password:
        passw_read = password.read().strip("\n")
        password.close()
    inp_usern = raw_input("Username: ")
    inp_passw = raw_input("Password: ")
    if inp_usern==usrn_read and inp_passw==passw_read:
        print("Succesful!")
        variable.open("database.txt","a")
        variable.write("Login succesful for: "+inp_usern)
        variable.write("Password: "+inp_passw)
        print("Your username and password is:")
        print(inp_usern)
        print(inp_passw)
        forward()
    else:
        print("Not valid input. Please try again.")
        inp_usern = []
        inp_passw = []
        login()
def end():
    print("Thankyou!")
def forward():
    print("This would continue to quiz!")
login()

另外,假设variable.open是有效的,如果无效,则需要将variable.open改为with open("database.txt","a") as variable

以上就是解决此问题的原因和方法,希望能对您有所帮助。

0
0 Comments

问题出现的原因:代码中使用了上下文管理器(context manager)来打开文件,而没有使用正确的语法来读取文件的内容。因此,程序无法将文本文件的每行内容与用户输入进行比较。

解决方法:删除代码中的两个file.close()语句,这样就不需要手动关闭文件了。同时,使用正确的语法来读取文件的内容,以便将每行内容与用户输入进行比较。

修改后的代码如下:

with open("file1.txt", "r") as filename:
    for line in filename:
        # 进行每行内容的比较
        if line.strip() == user_input:
            # 执行相应的操作
            Your actions

这样,程序就能正确地将文本文件的每行内容与用户输入进行比较,从而解决了问题。同时,使用上下文管理器打开文件也不需要手动关闭文件,代码更加简洁和安全。

0