我仍在學習 Python 的基礎知識,并且正在嘗試制作一個簡單的程式,該程式要求輸入用戶名和密碼并將兩者保存在檔案中。到目前為止我所擁有的是這個,我只會發布用戶名功能,這讓我很難過:
username = str(input("Username: "))
with open('users.txt', 'r') as users:
for line in users:
content = line.split(',')
while username == content[0]:
print("Username already exists. Try again.")
username = str(input("Username: "))
假設 users.txt 檔案具有以下資訊:
user1,12345
user2,98765
user3,password1
我知道問題是什么,但我不知道如何解決它。如果我先輸入 user1,我會收到錯誤,然后是 user3,再次錯誤,但如果我再次輸入 user1,它會接受它。發生這種情況是因為它不會再次讀取檔案的開頭,如果在 user3 之后沒有 user1 則它被驗證。我應該如何解決這個問題?我很感激任何幫助。
uj5u.com熱心網友回復:
這是一個可行的示例架構:
def import_users(fn):
u = {}
for line in open(fn):
name, pwd = line.strip().split(',')
u[name] = pwd
return u
def export_users(fn, ulist):
with open(fn,'w') as users:
for name,pwd in ulist.items():
print(f"{name},{pwd}", file=users)
users = import_users('users.txt')
while True:
username = input("Username: ")
if username in users:
break
print("Username already exists. Try again.")
黑曜石時代是正確的,你永遠不會在現實世界中這樣做。
uj5u.com熱心網友回復:
您的代碼段將提示用戶輸入不匹配的每一行。
嘗試將用戶名檢查邏輯移動到它自己的函式中:
def username_exists(username):
with open('users.txt', 'r') as users:
for line in users:
content = line.split(',')
if username == content[0]:
return True
return False
username = input("Username: ")
while username_exists(username):
username = input("Username: ")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/419887.html
標籤:
上一篇:Python3.9-在將數字作為輸入時,輸入陣列的最小值回傳空值,而陣列的最大值回傳正確的值
下一篇:我在哪里列舉錯了?
