1 回答
TA贡献1824条经验 获得超8个赞
您不应在脚本开头同时以读取和写入模式打开文件。以写入模式打开它会清空文件,因此您将无法读取它。您还将清除所有其他用户名和密码。登录时应以读取模式打开文件,注册时应以附加模式打开文件,以添加新行而不删除旧行。您应该
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
orin
或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()
添加回答
举报