我在python中使用open命令遇到麻烦

问题描述

我目前正在为我的实践开发一个桌面登录注册应用程序,并且在登录注册时遇到了一些麻烦。如果我输入REGISTER并在f.write()命令中添加我的信息,它将存储我的信息,但是之后一切都进行了,就像整个文件都被格式化了(这是注册问题)。

登录问题是我是否要检查文件中的名称或密码是否存在(此命令可能是错误的)。我尝试使用if login_email and login password in f:,但是它说login_emailpassword不存在。

代码

f = open('pass.txt','w')
fr = open('pass.txt','r')
from time import sleep

login_list = "LOGIN"
register_list = "REGISTER"

if 1 > -3232:
    print("Type register for new account\ntype login for login into existing account")
    bi = input("==>    ")

    if bi.upper() in login_list:
        print("you are registered?? nice Now loginnn!!")
        login_1 = input("your username:   ")
        login_2 = input("your password:   ")
        if login_1 and login_2 in fr:
            print("Nice my program worked??")
            exit()
        else:
            exit()

    elif bi.upper() in register_list:
        print("you are in register section: ")
        sleep(.9)
        print("NOTE:  Your password should only contain alphabets!")
        sleep(4)
        reg_1 = input("your username:     ")
        sleep(.9)
        reg_2 = input("your password:     ")
        sleep(.9)
        reg_2v1 = input("confirm password")
        if reg_2 == reg_2v1:
            f.write(reg_1 + " : " + reg_2 + "\n")
            print("Now login again,\")
        else:
            print("invalid password,try again")

    else:
        print("you gave me the wrong command")

else:
    exit()

解决方法

  1. 在脚本开始时,您不应同时以读写模式打开文件。以写入模式打开它会清空文件,因此您将无法读取它。您还将清除所有其他用户名和密码。登录时,您应该以读取模式打开文件,注册时应以追加模式打开文件,以添加新行而不删除旧行。并且您应该使用with来打开需要使用该文件的代码周围的文件。
  2. if login_1 and login_2 in fr:不是测试用户名和密码是否都在文件中的正确方法。由于运算符的优先级,其被解析为if login_1 and (login_2 in fr):。这仅检查login_1是否为空,然后仅检查文件中是否login_2。第二项测试永远不会起作用,因为文件的所有行都以换行符结尾,但是login_2无效,因此它们将永远不匹配。

您需要检查格式完整的行,包括换行符。

if f'{login_1} : {login_2}\n' in fr:
  1. if bi.upper() in login_list:似乎可疑。 login_list不是列表,而是一个字符串。因此,这将检查bi.upper()是否为子字符串-如果用户输入logingi,而不仅仅是login,它将成功。那是故意的吗?

完整代码:

from time import sleep

login_list = "LOGIN"
register_list = "REGISTER"

if 1 > -3232:
    print("Type register for new account\ntype login for login into existing account")
    bi = input("==>    ")

    if bi.upper() in login_list:
        print("you are registered?? nice now loginnn!!")
        login_1 = input("your username:   ")
        login_2 = input("your password:   ")
        with open('pass.txt','r') as fr:
            if f'{login_1} : {login_2}\n' in fr:
                print("Nice my program worked??")
                exit()
            else:
                exit()

    elif bi.upper() in register_list:
        print("you are in register section: ")
        sleep(.9)
        print("NOTE:  Your password should only contain alphabets!")
        sleep(4)
        reg_1 = input("your username:     ")
        sleep(.9)
        reg_2 = input("your password:     ")
        sleep(.9)
        reg_2v1 = input("confirm password")
        if reg_2 == reg_2v1:
            with open('pass.txt','a') as f:
                f.write(reg_1 + " : " + reg_2 + "\n")
            print("now login again,")
        else:
            print("invalid password,try again")

    else:
        print("you gave me the wrong command")

else:
    exit()

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...