English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
J'ai appris Python depuis longtemps, c'est la première fois que j'écris un code aussi long (je reconnais que je n'ai que3Plus de 00 lignes, il y a beaucoup de code répété, je reconnais que je suis vraiment mauvais, mais c'est aussi pas facile
Fonction personnalisée+Décorateur, une fonction écrite pour chaque module
Beaucoup de lieux peuvent utiliser des décorateurs (la logique ne suit pas, certains endroits ne sont pas utilisés), y compris les décorateurs doubles (je ne sais pas), beaucoup de lieux nécessitent une optimisation, trop de code répété
Je vais quand même sortir mon diagramme de flux, même si il semble pire que la fois dernière, mais j'ai quand même passé une heure, ce n'est pas facile !
Ça semble assez laid (je ne sais pas dessiner, mais je vais certainement m'efforcer la prochaine fois)
Fichier utilisateur :
Le nom du fichier est : user.txt
1représente l'utilisateur administrateur
2代表普通用户
smelond|admin|[email protected]|1 admin|admin|[email protected]|2 qwe|qweasd|[email protected]|2
code (il semble que ce programme ait encore beaucoup de bugs):
#!/usr/bin/env python # _*_ coding:utf-8 _*_ # Type de fichier:programme de gestion d'utilisateur, version décorée, multifonctionnelle # Nom de fichier:user_manage_program.py # Auteur:smelond import os os.system("cls") # effacer l'écran dans windows COUNT = 0 # compteur WHETHER_LOGIN = {"is_login": "error"} # utilisé pour déterminer si un utilisateur est connecté USER_LIST = [] # liste de stockage des informations des utilisateurs actuels def register_function(): # fonction d'enregistrement (tous les enregistrements appellent cette fonction) count = 3 # compteur, joue un rôle d'indication à l'utilisateur for i in range(3): # boucle3fois print("Enregistrement utilisateur【Vous n'avez que3fois】, vous avez encore 【%s】fois d'opportunité".center(8(0, "=") % count) # afficher l'indication count -= 1 # réduire à chaque fois1 username = input("请输入用户名:") while True: passwd = input("请输入密码:") si len(passwd) >= 5: break sinon: # Si le mot de passe saisi est inférieur à5, chiffres, opération vers le bas print("Veuillez saisir un mot de passe supérieur à5de caractères de mot de passe) input_passwd = input("【1:continuer à saisir;2:retourner à l'étape précédente】) si input_passwd == "1: pass else: main() while True: email = input("Veuillez saisir une adresse e-mail :") email_count = email.count("@") # vérifier si l'adresse e-mail saisie contient @, # print(email_count) # retourner1représente qu'il y a un @ si email_count == 1: break # Si il y a un symbole @, cela signifie que l'adresse e-mail saisie est correcte, sortir du cycle actuel else: print("Veuillez saisir une adresse e-mail correcte") input_email = input("【1:continuer à saisir;2:retourner à l'étape précédente】) si input_email == "1: pass else: main() register_user = [username, passwd, email, "2"] # Mettre notre nom d'utilisateur, mot de passe et adresse e-mail dans une liste, utilisateur ordinaire, donc ajouter un2 with open("user.txt", "r") as user: for line in user: f_user_list = line.strip("\n").split("|") si register_user[0] == f_user_list[0]: print("Le nom d'utilisateur est déjà enregistré") break if register_user[2] == f_user_list[2]: # Juger si l'email et le nom d'utilisateur que nous avons entrés existent déjà print("L'email est déjà enregistré") break else: # Après avoir passé le filtre ci-dessus, commencer à écrire nos informations d'enregistrement dans la base de données (j'ai l'impression qu'il y a un bug là-bas) user_write = "|".join(register_user) # Utiliser la méthode join pour convertir cette liste en une liste séparée par | # open_user = open("user.txt", "a") # a pour écrire en mode append # open_user.write("\n" + user_write) # open_user.close() # N'oubliez pas de fermer with open("user.txt", "a") as f: f.write("\n" + user_write) # Comme la méthode mentionnée ci-dessus, cette méthode n'a pas besoin de fermer le fichier print("Enregistrement réussi") user_write = """Nom d'utilisateur:【%s】;Mot de passe:【%s】;Email:【%s】""" \ % (register_user[0], register_user[1], register_user[2]) # Message d'information de l'enregistrement réussi return user_write # Retourner le message d'information def outer(func): # Décorateur, utilisé pour gérer les interfaces def inner(*args, **kwargs): if WHETHER_LOGIN["is_login"] == "success" and USER_LIST[3] == "1: # Pourquoi ajouter des guillemets ? Parce que dans la liste, il s'agit de chaînes de caractères, pas de nombres entiers r = func() # Exécuter la fonction passée en paramètre return r # Retourner elif WHETHER_LOGIN["is_login"] == "success" and USER_LIST[3] == "2: # Si c'est un utilisateur ordinaire, indiquer qu'il n'a pas de permissions suffisantes et retourner à la fonction main print("\nL'utilisateur actuel est un utilisateur ordinaire【%s】,n'a pas de permissions suffisantes" % USER_LIST[0]) main() else: print("\nAucun utilisateur connecté actuellement, veuillez vous connecter à nouveau avant de réessayer...") # Sinon, il n'est pas connecté main() return inner def user_login(func): # Décorateur pour vérifier si l'utilisateur est connecté def inner(*args, **kwargs): if WHETHER_LOGIN["is_login"] == "success": # Vérifiez si vous êtes connecté r = func() return r # Si vous êtes déjà connecté, retournez à la fonction originale else: user_no = input("Veuillez vous connecter à nouveau avant de réessayer【1:connexion de l'utilisateur;2:retour à】:") if user_no == "1: login() else: print("返回成功") main() return inner # Attention, il faut absolument retourner un inner, sinon inner au-dessus ne sera pas exécuté, ne pas ajouter () à la fin, si vous l'ajoutez, cela équivaut à appeler cette fonction def exit_login(): # 6Déconnexion global USER_LIST if USER_LIST: quit_login = input("L'utilisateur actuel est [%s],êtes-vous sûr de vouloir vous déconnecter [Y/N] : "%s" % USER_LIST[0]) # if quit_login == "Y" or quit_login == "y" or quit_login == "yes": if quit_login in ("Y", "y", "yes", "yES", "yeS", "yEs", "YES", "Yes", "YEs"): # Si quit_login correspond à l'un de ceux-ci, continuez l'exécution WHETHER_LOGIN["is_login"] = "error" USER_LIST = [] # Effacez directement la liste pour la remettre à son état initial, je ne sais pas si cette méthode est bonne, mais elle semble fonctionner elif quit_login in ("N", "n", "No", "nO", "NO"): print("Échec de la sortie") else: print("Aucun utilisateur connecté....") def verifi_passwd(): with open("user.txt", "r") as old_user: lines = old_user.readlines() # Lisez tout le fichier en une fois, cela ne semble pas être une bonne méthode flag = True cout = 3 while flag: cout -= 1 user_info = input("Veuillez saisir un nom d'utilisateur : ") if user_info == "": # Vérifiez si une chaîne a été saisie print("Vous n'avez pas saisi d'utilisateur....\n") manage() for line in lines: user_all_info = line.strip("\n").split("|") if user_info == user_all_info[0]: current_user = user_all_info # Si l'utilisateur entré est le même que celui dans le fichier utilisateur, écrivez toutes ses informations dans une nouvelle liste flag = False if cout == 0: print("Cependant, vous ne savez peut-être pas quels utilisateurs il y a, allez-y voir de toute urgence....") manage() lines_user = [lines, current_user] return lines_user def user_info_func(username, password_or_power, user_info, lines): # Quelques types de paramètres transmis : nom d'utilisateur, mot de passe ou droits d'accès, emplacement de la liste de l'utilisateur à modifier, contenu du fichier à boucler new_user_info = username.copy() # Copiez username dans new_user_info new_user_info[user_info] = password_or_power # Modifiez le nouveau mot de passe de l'utilisateur ou les droits d'accès username = "|".join(username) # Convertir la liste en contenu reconnu par la base de données new_user_info = "|".join(new_user_info) # print(username, new_user_info) with open("user.txt", "w") as new_user: for line in lines: # Afficher le contenu complet du fichier en boucle if username in line: # Si les informations de l'utilisateur retournées sont dans le fichier retourné line = line.replace(username, new_user_info) # Remplacez les anciennes informations de l'utilisateur par les nouvelles informations de l'utilisateur new_user.write(line) # Écrire dans le fichier print("Modification réussie") # Message d'information @outer # Appel du décorateur def manage(): # 5Interface de gestion des utilisateurs while True: print("Interface de gestion des utilisateurs【Bienvenue administrateur[%s]】".center(69, "=") % USER_LIST[0]) print("1:查看所有用户;2、添加新用户;3:删除用户;4:修改用户密码;5:升级用户权限;6:退出用户管理 user_input = input("Veuillez saisir le numéro d'objet : ") if user_input == "1: # Voir les informations de l'utilisateur print("\n" + "-" * 80) # Afficher80个- with open("user.txt", "r") as user_info: pour line in user_info: user_list = line.strip("\n").split("|") # Supprime le retour chariot par défaut et le "|", le convertit en type de liste si user_list[3] == "1: user_rights = "Utilisateur administrateur" # Si le dernier nombre de l'utilisateur est égal à1représente l'administrateur else: user_rights = "Utilisateur ordinaire" # Sinon, c'est un utilisateur ordinaire ordinary_user = """Nom d'utilisateur【%s】\tMot de passe【%s】\tEmail【%s】\tNiveau d'utilisateur【%s】""" \ % (user_list[0], user_list[1], user_list[2], user_rights) # Il y a généralement un retour chariot entre les utilisateurs print(ordinary_user) print("-" * 80 + \n") elif user_input == "2: while True: ret = register_function() # Appel de la fonction d'enregistrement print(ret) # Affiche la valeur de retour break # Sort de la boucle while actuelle elif user_input == "3: flag = "error" # Par défaut, il n'y a pas d'utilisateur (pour faire une提示作用) del_user = verifi_passwd()[1][0] # Obtient la deuxième valeur retournée par la fonction print("\033[1;31mL'utilisateur à supprimer est : \033[0m", del_user) with open("user.txt", "r") as old_user: lines = old_user.readlines() # Lisez tout le fichier en une fois, cela ne semble pas être une bonne méthode1 with open("user.txt", "w") as new_user: for line in lines: # Parcourez ligne par ligne le texte lu précédemment si line.startswith(del_user): # Vérifie si l'utilisateur entré est dans la base de données (commence par le nom d'utilisateur entré) flag = "success" continue new_user.write(line) si flag == "success": # Indique le succès print("Suppression réussie") else: print("Il n'y a pas cet utilisateur...") # Si l'entrée est un espace ou des utilisateurs inexistants, indique qu'il n'y a pas cet utilisateur continue elif user_input == "4: ret = verifi_passwd() # Obtient la valeur de retour de la fonction lines = ret[0] # Obtient le contenu complet du fichier retourné username = ret[1] # Obtient les utilisateurs qui doivent modifier leur mot de passe new_password = input("Entrez le nouveau mot de passe de l'utilisateur :") si len(new_password) < 5: # Vérifie si la longueur du mot de passe entré est supérieure ou égale à5compte des chiffres error_prompt = input("La longueur de votre mot de passe entré est inférieure à ")5compte des chiffres, puisqu'il s'agit de vous, administrateur, entrez "Y" pour continuer: ").strip("") # Supprime les espaces si error_prompt n'est pas dans ("y", "Y"): # Si la valeur entrée n'est pas "y" ou "Y", le programme se termine directement print("退出。。。") continue user_info_func(username, new_password, 1, lines) # 传入实参到函数,1在列表中的位置代表用户的新密码 elif user_input == "5]: # 下面这部分和上面的部分基本相似,其实可以写一个函数用来调用的 ret = verifi_passwd() lines = ret[0] username = ret[1] # 获取到输入用户的所有信息 new_power = input("输入Y提升用户权限:") if new_power not in ("y", "Y"): print("输入错误。。。") break user_info_func(username, "1, 3, lines) # 传入实参:用户名、权限(1代表管理员)、位置、循环的文件内容 elif user_input == "6: print("返回上一级!!!") main() else: print("输入有误") @user_login # 调用装饰器 def see(): # 4查询当前用户的基本信息 if USER_LIST[3] == "1]: # 数据库里面定义了1代表管理员用户,2代表普通用户 user_level = "管理员用户" else: user_level = "普通用户" user_see = """ ---------------------------------------- 用户名: 【%s】 密 码: 【%s】 邮 箱: 【%s】 用户等级:【%s】 ---------------------------------------- """ % (USER_LIST[0], USER_LIST[1], USER_LIST[2], user_level) # 一个简单的格式化输出 print(user_see) def error_password(): counter = 3 while True: counter -= 1 if counter == 0: print("你输入错误的次数太多,程序自动返回。。。") main() else: print("两次输入的密码不相同。。。") continue @user_login # 调用装饰器 def alter(): # 3修改密码 print("当前用户为:【%s】" % USER_LIST[0]) while True: old_user_password = input("请输入当前用户的旧密码密码:") if old_user_password == USER_LIST[1]: flag = True count = 3 while flag: count -= 1 new_user_password = input("Entrez le mot de passe actuel de l'utilisateur\033[1;31m nouveau mot de passe\033[0m:) # Ajoutez une couleur au nouveau mot de passe new_user_password1 = input("Entrer à nouveau le mot de passe actuel de l'utilisateur\033[1;31m nouveau mot de passe\033[0m:) if len(new_user_password) >= 5: flag = False elif count == 0: print("Entrée illégale multiple, le programme revient automatiquement... main() else: print("L'entrée n'est pas légitime, veuillez entrer un mot de passe supérieur à5de caractères de mot de passe) if new_user_password == new_user_password1: # Jugez si les mots de passe entrés deux fois sont égaux with open("user.txt", "r") as user_info: # Ouvrez ce fichier en mode lecture old_user_info = "|".join(USER_LIST) # Obtenez les informations anciennes for line in user_info: # Affichez chaque ligne obtenue if USER_LIST[0] in line: # Trouvez le nom d'utilisateur du utilisateur connecté en ce moment USER_LIST[1] = new_user_password1 # Si trouvé, ajoutez à nouveau le nouveau mot de passe à notre liste d'information utilisateur globale new_user_info = "|".join(USER_LIST) # Convertissez le contenu de la liste USER_LIST en format de base de données utilisateur (nouvelle information utilisateur) # print(new_user_info) # print(old_user_info) break # Sortir de la boucle actuelle with open("user.txt", "r") as old_user: lines = old_user.readlines() # Lisez tout le fichier en une fois, cela ne semble pas être une bonne méthode with open("user.txt", "w") as new_user: for line in lines: # Parcourez ligne par ligne le texte lu précédemment if old_user_info in line: # Vérifiez si l'ancienne information utilisateur est présente dans le fichier line = line.replace(old_user_info, new_user_info) # Si existant, utilisez replace pour remplacer new_user.write(line) # Continuez à écrire dans le fichier print("修改成功√") break # Sortir après la fin else: # 两次不相等 print("两次输入的密码不相同,程序自动返回。。。") main() else: # 当前用户密码输入错误 print("当前用户密码输入错误,程序自动返回。。。") main() def register(): # 2用户注册 if WHETHER_LOGIN["is_login"] == "success": quit_login = input("无法注册用户,请退出登录后重试【1: Exit login;2:返回上一步】:") if quit_login == "1: exit_login() # Passer à la fonction de sortie utilisateur elif quit_login == "2: print("返回成功") elif WHETHER_LOGIN["is_login"] == "error": ret = register_function() # Appel de la fonction d'enregistrement print(ret) # Affichez la valeur de retour def login(): # 1用户登录 print("用户登录".center(82, "=")) username = input("请输入用户名:") passwd = input("请输入密码:") with open("user.txt", "r") as user: for line in user: f_user_list = line.strip("\n").split("|") # Supprimez les retours chariot par défaut et |, puis convertissez-le en liste et affectez-le à f_admin_list if f_user_list[0] == username and f_user_list[1] == passwd: print("登录成功") global USER_LIST USER_LIST = f_user_list # Placez la ligne actuelle obtenue dans la liste des informations utilisateur WHETHER_LOGIN["is_login"] = "success" # Configurez la valeur de is_login à success une fois connecté WHETHER_LOGIN["is_user"] = username # Placer l'utilisateur connecté dans le dictionnaire pour une recherche ultérieure # print(USER_LIST) return f_user_list else: print("Login failed") def main(): while True: global COUNT COUNT += 1 print("User Management System".center(80, "*) + \n") print("1, User login;2: User registration;3: Change password;4: User information;5: User management;6: Exit login;7: Exit program) inp = input("Please enter the number: ") if inp == "1: if USER_LIST: if USER_LIST[3] == "1: print("The current user is an administrator: [%s], cannot continue to log in" % USER_LIST[0]) else: print("The current user is [%s], cannot continue to log in" % USER_LIST[0]) else: login() elif inp == "2: register() elif inp == "3: alter() elif inp == "4: see() elif inp == "5: manage() elif inp == "6: exit_login() elif inp == "7: exit("Program has exited!!!") else: if COUNT == 3: exit("Input error times too many, program will exit automatically...") else: print("Input error, please re-enter...\n") continue main()
This is the full content of the example explanation of the Python user management system that the editor has shared with everyone. I hope it can be a reference for everyone, and I also hope that everyone will support the Shouting Tutorial more.
Declaration: The content of this article is from the Internet, and the copyright belongs to the original author. The content is contributed and uploaded by Internet users spontaneously. This website does not own the copyright, has not been edited by humans, and does not assume relevant legal liabilities. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (when sending an email, please replace # with @ to report abuse, and provide relevant evidence. Once verified, this site will immediately delete the infringing content.)