为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕桂英3389331 2023-06-27 14:13:06
我目前正在为我的实践开发一个桌面登录注册应用程序,但在登录和注册方面遇到了一些问题。如果我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 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:   ")        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 回答

?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

  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()有任何子字符串 - 如果用户输入logoringi,而不仅仅是输入,它将成功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()


查看完整回答
反对 回复 2023-06-27
  • 1 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信