1

我制作了一个 singup 窗口,将人们的数据保存在文本文件中,在登录窗口中,我使用 for 循环读取数据并检查密码和用户名是否正确,但每次我按登录时,它只显示不正确用户名或密码,即使密码正确也不会打开仪表板窗口。

def check():
        storefile = open('store.txt','r')
        for line in storefile:
            if namepasss and nameuser in line:
                dashboard()
            else:
                Label(my, text="Incorrect username or\n password.", fg="red", bg="lightgray").grid(row=4, column=2)


    name_useval = StringVar()
    name_passval = StringVar()
    namepasss = name_passval.get()
    nameuser = name_useval.get()
    Entry(my,  textvariable=name_useval,bg="#e3e2e2", bd=0, highlightthickness=0,).grid(row=2, column=2)
    Entry(my,  textvariable=name_passval,bg="#e3e2e2", bd=0, highlightthickness=0,).grid(row=3, column=2)
    login = Button(my, text="Login", font=("sans serif", 12, ), bg="lightgray", bd=2,
                    highlightthickness=0, fg="Black", command=check).grid(row=10, column=2)

这是用户在 singup 窗口中 singup 后数据保存在文本文件中的方式

('randomguy', 'randomguy@gmail.com', '901909210', 'randompassword')
('randomguy2', 'randomguy2@gmail.com', '901978210', 'randompassword2')
4

1 回答 1

0

该声明

namepasss and nameuser in line

实际上被评估为

namepasss and (nameuser in line)

由于运算符优先级。因此,考虑到算子的懒惰and,(写得不好)的求值顺序如下:

if namepasss == True:
    if (nameuser in line) == True:
        return True
return False

既然namepasss是 a string,任何东西都""不会评估为True

您真正需要的是以下内容:

(namepasss in line) and (nameuser in line)

在不知道文件中写入的内容以及分配的值的情况下namepasssnameuser很难提供更多帮助。

于 2021-06-28T07:40:01.267 回答