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()
添加回答
舉報