Python 如何修复此接受部分匹配密码的程序

Python 如何修复此接受部分匹配密码的程序,python,Python,我正在用Python为我的学校创建一个登录和密码程序,我已经创建了带有许多验证的注册部分,它完全有效&登录部分部分有效 登录部分有问题。它定位用户名和密码,但是它也定位以该首字母开头的密码,并允许您登录帐户(错误)。例如,我的密码是“mat”,如果我键入ma或m,它将允许我登录该帐户。但好的是,它不让我登录与其他信件只是这些 PATH=("pass"+" "+username+".txt") if os.path.isfile(PATH) and os.access(PATH, os.R_OK

我正在用Python为我的学校创建一个登录和密码程序,我已经创建了带有许多验证的注册部分,它完全有效&登录部分部分有效

登录部分有问题。它定位用户名和密码,但是它也定位以该首字母开头的密码,并允许您登录帐户(错误)。例如,我的密码是“mat”,如果我键入ma或m,它将允许我登录该帐户。但好的是,它不让我登录与其他信件只是这些

PATH=("pass"+" "+username+".txt")

if os.path.isfile(PATH) and os.access(PATH, os.R_OK):
    print ("Username does exist please enter password: ")
    w = input("Password:  ") 
    with open("pass"+" "+username+".txt") as f:
        found = False
        for line in f:
            if w in line:
                loginuser()
                found = True
        if not found:
            print("Wrong password. Please re-enter")
            login()
else:
    print("Username not found.")

替换此行,检查子字符串是否匹配

if w in line:
if w == line.strip():
字符串完全匹配

if w in line:
if w == line.strip():

您的字符串以“\n”结尾,这就是您需要修剪它的原因。这也会删除字符串开头和结尾的空格,比如“mat\n”会变成“mat”,所以要小心。

替换此行,检查子字符串是否匹配

if w in line:
if w == line.strip():
字符串完全匹配

if w in line:
if w == line.strip():
您的字符串以“\n”结尾,这就是您需要修剪它的原因。这也会删除字符串开头和结尾的空格,比如“mat\n”会变成“mat”,所以要小心。

if w in line:
测试输入“w”的任何字母是否在密码文本文件的行中。您需要进行如下等价性测试:

if line == w:
这样,一个完全匹配的字母就可以让用户登录,而不仅仅是一个或多个字母匹配。

if w in line:
测试输入“w”的任何字母是否在密码文本文件的行中。您需要进行如下等价性测试:

if line == w:

因此,一个完全匹配的密码将用户登录,而不仅仅是一个或多个字母匹配。

如果要将每个密码存储在单独的行中,为什么不直接比较它们呢。因此,如果w在直线上,则不执行此操作,而是执行以下操作:
如果w==行

如果要将每个密码存储在单独的行上,为什么不直接比较它们呢。因此,如果w在直线上,则不执行此操作,而是执行以下操作:
如果w==line,那是因为您正在使用这一行

if w in line:
您正在检查该行的一部分是否包含输入,以确保以下内容正确:

"w" in "password" -> True
"pass" in "password" -> True
"word" in "password" -> True
这当然是不正确的,你需要检查是否相等,因此:

if w == line.strip():

应该做这项工作

因为你在使用这条线

if w in line:
您正在检查该行的一部分是否包含输入,以确保以下内容正确:

"w" in "password" -> True
"pass" in "password" -> True
"word" in "password" -> True
这当然是不正确的,你需要检查是否相等,因此:

if w == line.strip():

应该做这项工作

也许是因为f中的行:正在做字符?你试过打印出什么是行,什么是f来调试循环在做什么吗…?看起来你好像是在用明文存储密码。这真是个坏主意。请不要这样做!我假设for用于文本文件中的每一行,并且文本文件中只有1个密码。它的工作程序完全但是,如果我键入一个初始密码开始,它让我登录?非常奇怪。它让你只需要
t
?@rollstuhlfahrer这不是给任何人的,只是为了我的个人测试。也许是为了f中的一行:是在做角色吗?你试过打印出什么是行,什么是f来调试循环在做什么吗…?看起来你好像是在用明文存储密码。这真是个坏主意。请不要这样做!我假设for用于文本文件中的每一行,并且文本文件中只有1个密码。它的工作程序完全但是,如果我键入一个初始密码开始,它让我登录?非常奇怪。它能让你和
t
一起进去吗?@rollstuhlfahrer这不是给任何人的,只是为了我的个人测试。ty-mate我修好了它ty-mate我修好了