1 回答

TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超8個(gè)贊
您不應(yīng)在腳本開頭同時(shí)以讀取和寫入模式打開文件。以寫入模式打開它會(huì)清空文件,因此您將無法讀取它。您還將清除所有其他用戶名和密碼。登錄時(shí)應(yīng)以讀取模式打開文件,注冊時(shí)應(yīng)以附加模式打開文件,以添加新行而不刪除舊行。您應(yīng)該
with
只打開需要使用它的代碼周圍的文件。if login_1 and login_2 in fr:
不是測試用戶名和密碼是否都在文件中的正確方法。由于運(yùn)算符優(yōu)先級,它被解析為if login_1 and (login_2 in fr):
. 這只是檢查login_1
不為空,然后檢查是否login_2
在文件中。第二個(gè)測試永遠(yuǎn)不會(huì)工作,因?yàn)槲募男卸家該Q行符結(jié)尾,但login_2
不是,所以它們永遠(yuǎn)不會(huì)匹配。
您需要檢查完全格式化的行,包括換行符。
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()
添加回答
舉報(bào)