如何解决我在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()
解决方法
- 在脚本开始时,您不应同时以读写模式打开文件。以写入模式打开它会清空文件,因此您将无法读取它。您还将清除所有其他用户名和密码。登录时,您应该以读取模式打开文件,注册时应以追加模式打开文件,以添加新行而不删除旧行。并且您应该使用
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()
是否为子字符串-如果用户输入log
或in
或gi
,而不仅仅是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 举报,一经查实,本站将立刻删除。