微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决我在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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?