函數f3.read()
正在讀取整個文件,並將文件指針移至末尾。讀取任何後續文件而不關閉並重新打開文件將返回None
。
您需要將文件實際解析爲數據結構,以便您可以搜索包含,而不是檢查整個文件中是否存在名稱或密碼。如果兩個用戶擁有相同的密碼會發生什麼?如果您只是在整個文件中搜索單個字符串,則無法確保給定用戶名的密碼正確。
例如,假設你的文件看起來是這樣的:
username1,password1
username2,password2
username3,password3
你解析代碼應該打開和讀取該文件,並檢查遏制不用每次都搜索整個文件:
users = {}
with open("helloworld.txt") as f3:
for line in f3:
name, password = line.split(",")
users[name] = password.strip()
user = input("Enter login name: ")
if user in users:
passw = input("Enter password: ")
print()
if passw == users[user]:
print("Login successful!")
else:
print("Bad password")
else:
print("Bad username")
請注意,我已將文件更改爲打開以使用context manager(關鍵字with
)。您應該這樣做,以獲得更可靠的資源管理。你也可以將通過使字典生成一個dictionary comprehension進一步改進,並可能通過使用異常處理字典檢查,而不是if X in Y
:
with open("helloworld.txt") as f3:
pairs = (line.split(",") for line in f3)
users = {name:password.strip() for name, password in pairs}
user = input("Enter login name: ")
passw = input("Enter password: ")
try:
if passw == users[user]:
print("Login successful!")
else:
print("Bad password")
except KeyError:
print("Bad username")
你甚至可以凝聚的用戶名/密碼字典制作成一個單一的理解,但我認爲這會顯着阻礙可讀性而沒有任何好處。
'read()'只在你第一次這樣做時才起作用。 –
如果您要以字典形式保存所有用戶名和密碼,您可以考慮將其保存爲json文件並將其加載到字典中,以便您可以加載文件並檢查用戶名是否存在,如果是,則密碼爲正確。 https://docs.python.org/3/library/json.html –