課題 1: ログインインターフェイスを作成します
1. ユーザー名とパスワードを入力します
2. 認証に成功した後、ウェルカムメッセージを表示します 3. 3 回間違えたら「Locked」と入力します
アイデア:
(1) ユーザーがユーザー名を入力します。
(2) ロック ファイルに移動して、ユーザー名がロックされているかどうかを確認します。
(3) 現在のユーザーに移動します。ユーザーが存在するかどうかを確認するため
(4) ユーザーはパスワードを入力し、3 回間違えるとロックされます
(5) ロック後、ユーザー名は現在のファイルから削除され、追加されます。ロックされたファイルに。
ファイルの読み取り、変更、書き込み操作には注意してください。これらの操作はリストを使用して完了する必要があります。そうしないと、不要なエラーが発生します。最後に、これらの操作を完了する関数を定義し、使用時にこれらを呼び出します。 .関数で十分です。
リストファイルを操作するときは、改行の処理や要素の追加方法に注意する必要があり、これらの方法は、ファイルの形式をきれいに保つために、リストと辞書を使用してファイルを読み書きするのに最適です。
コードは次のとおりです:
import os,sys,getpass,collections retry_limit = 3 #密码错误三次被锁定 retry_count = 0 #起始次数是0次 def locked_user(users,filename): #用于存放锁定用户的文件,当用户锁定的时候,要从原文件删除,添加到新的文件中 with open(filename,"w+") as locked_f:for key,value in users.items(): line = [] line.append(key) line.append(value) file_line = " ".join(line) + "\n"locked_f.write(file_line) active = Trueif __name__ == "__main__":while True: username = input("请输入用户名(输入quit退出):") with open("account_lock.txt","r") as f: user_lists = f.readlines()for user_list in user_lists:if user_list.strip() == username: print("您好,你的用户已经被锁定,请联系管理员!")continue #如果用户锁定,结束当前循环,执行下一次用户输入else: passif username == "quit": sys.exit(0) with open("account.txt") as active_f: users_dict = collections.OrderedDict()for line in active_f: user,pwd = line.strip().split() users_dict[user] = pwdif username in users_dict.keys():while retry_count < retry_limit: passwd = getpass.getpass("请输入你的密码:") # 隐藏式输入密码 # 判断用户是否在用户列表中if users_dict[username] == passwd: print("欢迎回来,认证成功!")breakelse:if retry_count != 2: #提示用户注意,还有几次机会将被锁定 print("您输入的密码不对,您还有%d次机会,否则系统将被锁定!" % (2 - retry_count)) retry_count += 1else: print("您输入的次数过多,%s已被锁定,请联系管理员" %username) #用户锁定之后,要把锁定的用户从当前文件删除,移到锁定文件中 users_dict.pop(username) locked_user(users_dict,"account.txt") with open("account_lock.txt","a+") as a_f: a_f.write(username + "\n")else: print("对不起,您输入的用户不存在,请重新输入!!!")
with open(filename,) key,value line = file_line = .join(line) + active = __name__ == retry_limit = retry_count = username = input( with open(,) user_lists = user_list user_list.strip() == print( username == sys.exit( with open() users_dict = line user,pwd = users_dict[user] = username retry_count < passwd = input( users_dict[username] == print( retry_count != print( % ( - retry_count += print( % locked_user(users_dict, with open(,) user_lines = user_messages = user_line with open(,) user_message user_message = user_message + print() 运行如下: 请输入用户名(输入quit退出):zeng 请输入你的密码:222 您输入的密码不对,您还有2次机会,否则系统将被锁定! 请输入你的密码:222 您输入的密码不对,您还有1次机会,否则系统将被锁定! 请输入你的密码:222 您输入的次数过多,zeng已被锁定,请联系管理员 ['chang', 'geng', 'xue', 'zeng'] 请输入用户名(输入quit退出):zhu 请输入你的密码:333 您输入的密码不对,您还有2次机会,否则系统将被锁定! 请输入你的密码:333 您输入的密码不对,您还有1次机会,否则系统将被锁定! 请输入你的密码:333 您输入的次数过多,zhu已被锁定,请联系管理员 ['chang', 'geng', 'xue', 'zeng', 'zhu'] 请输入用户名(输入quit退出):quit
上記は、一般的に使用される形式のファイル変換プロセスです。ただし、「w」を使用してファイルを読み取る場合は、元のファイルの内容が破壊されることに注意してください。誤って削除しないように注意してください。ファイルライブラリ 時間になると、ボスが追い越します。
以上がログインインターフェースの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。