将输入与中的文件进行比较时出现问题

2024-09-22 20:30:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图让登录通过的东西,但尽管所有的努力,它只是不工作。花了2个小时寻找一个解决方案,几乎重写了这个程序5次。需要你们的帮助。是的,我知道fh.seek(0)垃圾邮件是假的,但我仍然是一个新手在这方面

我需要它来比较我的输入登录和传递到那些在文本文件中,如果他们类似于写“访问授权”。如果没有-访问被拒绝

问题是,它一直说,他们是不同的,即使我让程序写两个输入和文本文件信息一起比较。他们很相似。我试图搞乱backspaces,因为我的程序出于某种原因不断地向我的输入添加backspace,所以我向文本文件添加backspaces,但仍然不正确

a = input('Login - ')
b = input('Pass - ')
with open('C:\\Users\\user\\Desktop\\text.txt', 'r') as fh:
    login = (fh.readlines()[0])
    print(login, a)
    fh.seek(0)
    passw = (fh.readlines()[1])
    print(passw, b)
    fh.seek(0)
    if (a == login) and (b == passw):
        fh.seek(0)
        print(fh.readlines()[2])
    else:
        fh.seek(0)
        print(fh.readlines()[3])

文本文件本身(没有点ofc,我只是不知道如何在没有em的情况下制作列表):

  • 你知道吗bloopbloop@gmail.com 你知道吗
  • 阿斯达斯德
  • 已授予访问权限
  • 拒绝访问

Tags: 程序信息input垃圾邮件loginseek解决方案print
1条回答
网友
1楼 · 发布于 2024-09-22 20:30:17

readlines保留每行的终止换行符。如果打印出readlines的结果,您可以看到:

lines = fh.readlines()
print(lines)

['bloopbloop@gmail.com\n', 'asdasd\n', 'Access granted.\n', 'Access denied.']

注意"\n"s。除非用户也输入这些,否则这两个将不匹配

您可以使用字符串^{}删除它们:

if a == login.rstrip("\n") and b == passw.rstrip("\n"):
    . . .

当有疑问时,打印出数据以验证您正在使用的数据


除此之外,我还要提出进一步的建议:

  • 您反复调用readlines,这就需要seek调用,而且速度会比需要的慢

  • 另外,作为第一个结果,您将文件打开的时间比您需要的时间长

我把它改成:

a = input('Login - ')
b = input('Pass - ')

with open('C:\\Users\\user\\Desktop\\text.txt', 'r') as fh:
    lines = fh.readlines()

# File gets closed before this is reached
login = lines[0]
passw = lines[1]

if a == login.rstrip("\n") and b == passw.rstrip("\n"):
    print(lines[2])
else:
    print(lines[3])

或者,使用lines上的解包,您可以摆脱凌乱的lines[0]部分:

a = input('Login - ')
b = input('Pass - ')

with open('C:\\Users\\user\\Desktop\\text.txt', 'r') as fh:
    lines = fh.readlines()

# Unpack lines into multiple variables
valid_user, valid_pass, granted_msg, error_msg = lines  

if a == valid_user.rstrip("\n") and b == valid_pass.rstrip("\n"):
    print(granted_msg)
else:
    print(error_msg)

相关问题 更多 >