Devoir 1 : Écrire l'interface de connexion
1. Saisissez le nom d'utilisateur et le mot de passe
2. Afficher le message de bienvenue après une authentification réussie
3. Verrouiller après trois entrées incorrectes
Idée :
(1) L'utilisateur saisit le nom d'utilisateur
(2) Accédez au fichier de verrouillage pour vérifier si le nom d'utilisateur ; est verrouillé ;
(3) Accédez à l'utilisateur actuel pour vérifier si l'utilisateur existe
(4) L'utilisateur saisit le mot de passe ; et est verrouillé après trois entrées incorrectes
(5) Après le verrouillage, supprimez le nom d'utilisateur du fichier actuel et ajoutez-le au fichier verrouillé.
Faites attention aux opérations de lecture, de modification et d'écriture des fichiers. Ces opérations doivent être effectuées à l'aide de listes, sinon cela provoquera des erreurs inutiles. Enfin, définissez une fonction à compléter. Pour ces opérations, appelez simplement ces fonctions lorsque vous les utilisez.
Lorsque vous utilisez des fichiers de liste, vous devez faire attention au traitement des sauts de ligne et à la façon d'ajouter des éléments. Ces méthodes sont préférables pour utiliser des listes et des dictionnaires pour lire et écrire des fichiers, de manière à ce que ces méthodes soient efficaces. pour garder le format soigné.
Le code est le suivant :
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("对不起,您输入的用户不存在,请重新输入!!!")
Le code ci-dessus La fonction de l'interface de connexion est implémentée, mais il y a quelques petits défauts, c'est-à-dire que l'écriture du fichier verrouillé n'est pas très bonne, et il y aura deux lignes vides de cette façon, uniquement le fichier précédent. peut être écrit et lu, et placé dans une liste, puis ajoutez l'utilisateur verrouillé à cette liste, relisez le fichier et le code sera corrigé ci-dessous.
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
Dans le code, on passe par une étape de conversion lors de l'écriture du fichier, comme le montre la figure ci-dessous :
Ce qui précède est le processus de conversion de fichiers. Cette méthode est une forme de traitement de fichiers couramment utilisée, mais veuillez noter que lorsque vous utilisez "w" pour lire des fichiers, cette méthode doit y être accordée. détruisez le contenu original du fichier, assurez-vous de l'utiliser avec prudence, n'endommagez pas accidentellement la bibliothèque de fichiers de l'entreprise, et votre patron vous dépassera alors.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!