猿问

我在 python 中使用 open() 命令时遇到问题

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

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

代码:

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()


慕桂英3389331
浏览 144回答 1
1回答

有只小跳蛙

您不应在脚本开头同时以读取和写入模式打开文件。以写入模式打开它会清空文件,因此您将无法读取它。您还将清除所有其他用户名和密码。登录时应以读取模式打开文件,注册时应以附加模式打开文件,以添加新行而不删除旧行。您应该with只打开需要使用它的代码周围的文件。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:if bi.upper() in login_list:似乎很可疑。login_list不是列表,而是字符串。因此,这将检查是否bi.upper()有任何子字符串 - 如果用户输入logorin或gi,而不仅仅是输入,它将成功login。这是故意的吗?完整代码:from time import sleeplogin_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()
随时随地看视频慕课网APP

相关分类

Python
我要回答