、ユーザーが存在しないことを言い続けています
関数f3.read()
は、ファイル全体を一度に読み込み、ファイルポインタを最後まで移動しています。ファイルを閉じたり開いたりすることなくファイルを読み取ると、None
が返されます。
名前またはパスワードがファイル全体に存在するかどうかをチェックする代わりに、ファイルを実際に解析して包含を検索できるデータ構造にする必要があります。 2人のユーザーが同じパスワードを持っているとどうなりますか?ファイル全体で単一の文字列を検索しているだけの場合は、指定されたユーザー名に対してパスワードが正しいことを確認していません。例えば
は、あなたのファイルを仮定すると、次のようになります。
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
)に変更しました。より信頼性の高いリソース管理を行うには、これを行う必要があります。 、あなたが1つでも理解にユーザー/パスワード辞書の作成を凝縮でき
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")
:あなたも、そしておそらく代わりにif X in Y
のチェック辞書を処理するために例外を使用して辞書生成dictionary comprehensionを行うことにより、更なる改善を行うことができしかし、私はそれが何のメリットも無く大幅に読みやすさを妨げていると思います。
'read()'はあなたがそのようにしたとき初めて動作します。 –
すべてのユーザー名とパスワードをディクショナリ形式で保存する場合は、ファイルをjsonファイルとして保存して辞書に読み込んで、ファイルをロードしてユーザー名が存在するかどうかを確認し、そうであればパスワードが正しい。 https://docs.python.org/3/library/json.html –