


Comment implémenter un système simple de gestion des informations sur les étudiants en python
May 12, 2023 am 09:43 AM1. Fonctions du système
1. Saisir les informations sur les étudiants
2. Rechercher les informations sur les étudiants
3. Modifier les informations sur les étudiants
5.
7 .Affichez toutes les informations sur les étudiants0. Quittez le système2. Environnement de développement du système1 Système d'exploitation?: win72. Outils de développement?: PyCharm3.Modules intégrés Python?: os,re. 3. Code d'implémentationimport os filename='students.txt' def main(): while True: menum() choice=int(input('請選擇功能:')) if choice in [0,1,2,3,4,5,6,7]: if choice==0: answer=input('您確定要退出系統(tǒng)嗎?(y/n)') if answer=='y' or answer=='Y': print('感謝您的使用!') break #退出while循環(huán)并退出系統(tǒng) else: continue elif choice == 1: insert() #錄入學(xué)生信息 elif choice == 2: search() #查找學(xué)生信息 elif choice == 3: delete() #刪除學(xué)生信息 elif choice == 4: modify() #修改學(xué)生信息 elif choice == 5: sort() #成績排序 elif choice == 6: total() #統(tǒng)計學(xué)生總?cè)藬?shù) elif choice == 7: show() #顯示所有學(xué)生信息 def insert(): student_list=[] #用于存儲學(xué)生信息,列表每個元素是字典。 while True: id=input('請輸入學(xué)生ID:') if not id: break name=input('請輸入學(xué)生姓名:') if not name: break try: Englist=int(input('請輸入英語成績:')) Python=int(input('請輸入Python成績:')) Java=int(input('請輸入Java成績:')) except: print('輸入無效,不是整數(shù)類型,請重新輸入!') continue #將錄入的學(xué)生信息保存到字典中 student={'id':id,'name':name,'English':Englist,'Python':Python,'Java':Java} #將學(xué)生信息添加到列表中 student_list.append(student) answer=input('是否繼續(xù)添加?(y/n)') if answer=='y' or answer=='Y': continue else: break #將學(xué)生信息保存在文件中 save(student_list) print('學(xué)生信息錄入完畢!') pass def search(): student_query=[] #用列表存儲,防止有同名學(xué)生。 while True: id='' name='' if os.path.exists(filename): mode=input('按ID查找請輸入1,按姓名查找請輸入2:') if mode == '1': id=input('請輸入要查找的學(xué)生ID:') elif mode == '2': name=input('請輸入要查找的學(xué)生姓名:') else: print('您的輸入有誤,請重新輸入!') search() with open(filename,'r',encoding='utf-8') as rfile: student=rfile.readlines() for item in student: d=dict(eval(item)) if id!='': if d['id']==id: student_query.append(d) elif name!='': if d['name']==name: student_query.append(d) #顯示查詢結(jié)果 show_student(student_query) student_query.clear() #清空列表 answer=input('是否要繼續(xù)查詢?(y/n)') if answer=='y' or answer=='Y': continue else: break else: print('暫未保存學(xué)生信息。') return pass def delete(): while True: student_id=input('請輸入要刪除的學(xué)生ID:') if student_id != '': if os.path.exists(filename): #判斷文件是否存在 with open(filename,'r',encoding='utf-8') as file: student_old=file.readlines() #讀取所有學(xué)生信息并保存在列表中 else: student_old=[] flag=False #用于標(biāo)記是否刪除 if student_old: with open(filename,'w',encoding='utf-8') as wfile: d={} for item in student_old: #遍歷學(xué)生信息列表 d=dict(eval(item)) #將字符串轉(zhuǎn)成字典 if d['id']!=student_id: wfile.write(str(d)+'\n') else: flag=True if flag: print(f'id為{student_id}的學(xué)生信息已被刪除') else: print(f'沒有找到ID為{student_id}的學(xué)生信息') else: print('無此學(xué)生信息') break show() #刪完之后重新顯示所有學(xué)生信息 answer=input('是否繼續(xù)刪除?(y/n)') if answer=='y' or answer=='Y': continue else: break pass def modify(): show() if os.path.exists(filename): #判斷文件是否存在 with open(filename,'r',encoding='utf-8') as rfile: student_old=rfile.readlines() else: return #結(jié)束函數(shù) student_id=input('請輸入要修改信息的學(xué)生ID:') with open(filename,'w',encoding='utf-8') as wfile: for item in student_old: d=dict(eval(item)) if d['id']==student_id: print('找到此學(xué)生信息,可以修改。') while True: try: d['name']=input('請輸入學(xué)生姓名:') d['English']=input('請輸入English成績:') d['Python']=input('請輸入Python成績:') d['Java']=input('請輸入Java成績:') except: print('您的輸入有誤請重新輸入!') else: break wfile.write(str(d)+'\n') print('修改成功!') else: wfile.write(str(d)+'\n') answer=input('是否繼續(xù)修改其他學(xué)生信息?(y/n)') if answer=='y': modify() pass def sort(): show() if os.path.exists(filename): with open(filename,'r',encoding='utf-8') as rfile: student_list=rfile.readlines() student_new=[] for item in student_list: d=dict(eval(item)) student_new.append(d) else: return asc_or_desc=input('請選擇(0:升序,1:降序):') if asc_or_desc=='0': asc_or_desc_bool=False elif asc_or_desc=='1': asc_or_desc_bool=True else: print('您的輸入有誤,請重新輸入!') sort() mode=input('請選擇排序方式(0:按總成績排序,1:按English成績排序,2:按Python成績排序,3:按Java成績排序)') if mode=='0': student_new.sort(key=lambda x: int(x['English'])+int(x['Python'])+int(x['Java']), reverse=asc_or_desc_bool) elif mode=='1': student_new.sort(key=lambda x:int(x['English']),reverse=asc_or_desc_bool) elif mode=='2': student_new.sort(key=lambda x: int(x['Python']), reverse=asc_or_desc_bool) elif mode=='3': student_new.sort(key=lambda x: int(x['Java']), reverse=asc_or_desc_bool) else: print('您的輸入有誤,請重新輸入!') sort() show_student(student_new) pass def total(): if os.path.exists(filename): with open(filename,'r',encoding='utf-8') as rfile: students=rfile.readlines() if students: print(f'一共有{len(students)}名學(xué)生') else: print('還沒有錄入學(xué)生信息!') else: print('暫未保存學(xué)生信息......') pass def show(): student_lst=[] if os.path.exists(filename): with open(filename,'r',encoding='utf-8') as rfile: students=rfile.readlines() for item in students: student_lst.append(eval(item)) if student_lst: show_student(student_lst) else: print('暫未保存過數(shù)據(jù)!') pass def save(stu_list): try: stu_txt=open(filename,'a',encoding='utf=8') except: stu_txt=open(filename,'w',encoding='utf-8') for item in stu_list: stu_txt.write(str(item)+'\n') stu_txt.close() def show_student(lst): if len(lst)==0: print('沒有查到學(xué)生信息,無數(shù)據(jù)顯示!') return #定義標(biāo)題顯示格式 format_title='{:^6}\t{:^12}\t{:^10}\t{:^10}\t{:^10}\t{:^8}' print(format_title.format('ID','姓名','English成績','Python成績','Java成績','總成績')) #定義內(nèi)容顯示格式 format_data='{:^6}\t{:^12}\t{:^10}\t{:^18}\t{:^14}\t{:^8}' for item in lst: print(format_data.format(item.get('id'),item.get('name'),item.get('English'),item.get('Python'),item.get('Java'),str(int(item.get('English'))+int(item.get('Python'))+int(item.get('Java'))))) pass def menum(): print('-------------------學(xué)生信息管理系統(tǒng)--------------------') print('-----------------------功能菜單------------------------') print(' 1.錄入學(xué)生信息') print(' 2.查找學(xué)生信息') print(' 3.刪除學(xué)生信息') print(' 4.修改學(xué)生信息') print(' 5.成績排序') print(' 6.統(tǒng)計學(xué)生總?cè)藬?shù)') print(' 7.顯示所有學(xué)生信息') print(' 0.退出系統(tǒng)') print('------------------------------------------------------') main()4. Packagez le projet et générez le fichier exécutable .exe1 Installez le module tiers, ouvrez la fenêtre DOS, entrez : pip install PyInstaller et appuyez sur Entrée, 2. Entrez?: pyinstaller -F emplacement spécifique du fichier programme,3. Après avoir appuyé sur Entrée, vous pouvez voir l'emplacement du fichier .exe sur l'avant-dernière ligne du contenu de sortie.
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!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Pour réaliser la correction d'erreur de texte et l'optimisation de la syntaxe avec l'IA, vous devez suivre les étapes suivantes: 1. Sélectionnez un modèle ou une API d'IA appropriée, tels que Baidu, Tencent API ou bibliothèque NLP open source; 2. Appelez l'API via Curl ou Guzzle de PHP et traitez les résultats de retour; 3. Afficher les informations de correction d'erreur dans l'application et permettre aux utilisateurs de choisir d'adopter l'adoption; 4. Utilisez PHP-L et PHP_CODESNIFFER pour la détection de syntaxe et l'optimisation du code; 5. Collectez en continu les commentaires et mettez à jour le modèle ou les règles pour améliorer l'effet. Lorsque vous choisissez AIAPI, concentrez-vous sur l'évaluation de la précision, de la vitesse de réponse, du prix et du support pour PHP. L'optimisation du code doit suivre les spécifications du PSR, utiliser le cache raisonnablement, éviter les requêtes circulaires, revoir le code régulièrement et utiliser x

Utilisez le plot conjoint de Seaborn pour visualiser rapidement la relation et la distribution entre deux variables; 2. Le tracé de diffusion de base est implémenté par sn.jointplot (data = pointes, x = "total_bill", y = "Tip", kind = "dispers"), le centre est un tracé de dispersion et l'histogramme est affiché sur les c?tés supérieur et inférieur et droit; 3. Ajouter des lignes de régression et des informations de densité à un kind = "reg" et combiner marginal_kws pour définir le style de tracé de bord; 4. Lorsque le volume de données est important, il est recommandé d'utiliser "Hex"

Les listes de cha?nes peuvent être fusionnées avec la méthode join (), telles que '' .join (mots) pour obtenir "HelloworldFrompython"; 2. Les listes de nombres doivent être converties en cha?nes avec MAP (STR, nombres) ou [STR (x) Forxinnumbers] avant de rejoindre; 3. Toute liste de types peut être directement convertie en cha?nes avec des supports et des devis, adaptées au débogage; 4. Les formats personnalisés peuvent être implémentés par des expressions de générateur combinées avec join (), telles que '|' .join (f "[{item}]" ForIteminitems)

Installez PYODBC: utilisez la commande PiPInstallpyodbc pour installer la bibliothèque; 2. Connectez SQLServer: utilisez la cha?ne de connexion contenant le pilote, le serveur, la base de données, l'UID / PWD ou TrustEd_Connection via la méthode pyoDBC.Connect () et prendre en charge l'authentification SQL ou l'authentification Windows respectivement; 3. Vérifiez le pilote installé: exécutez pyodbc.Drivers () et filtrez le nom du pilote contenant ?SQLServer? pour vous assurer que le nom du pilote correct est utilisé tel que ?ODBCDriver17 pour SQLServer?; 4. Paramètres clés de la cha?ne de connexion

pandas.melt () est utilisé pour convertir les données de format larges en format long. La réponse consiste à définir de nouveaux noms de colonne en spécifiant id_vars conserver la colonne d'identification, Value_Vars Sélectionnez la colonne à fondre, var_name et valeur_name, 1.id_vars = 'name' signifie que la colonne de nom reste inchangée, 2.Value_vars = [Math ',' English ',' Science '. du nom de colonne d'origine, 4.value_name = 'score' définit le nouveau nom de colonne de la valeur d'origine et génère enfin trois colonnes, notamment le nom, le sujet et le score.

PythonCanBeoptimizedFormemory-Boundoperations AdreductoverHeadHroughGenerators, EfficientDatastructures et ManagingObjectliFetimes.first, useGeneratorsInSteadofListStoproceSlargedataseSeItematatime, EvitingLoadingEnteryToMeToMeMory.

Définissez d'abord un formulaire ContactForm contenant le nom, la bo?te aux lettres et les champs de message; 2. De l'avis, la soumission du formulaire est traitée en jugeant la demande de poste, et après la vérification, nettoyée_data est obtenue et la réponse est retournée, sinon le formulaire vide sera rendu; 3. Dans le modèle, utilisez {{form.as_p}} pour rendre le champ et ajouter {% csrf_token%} pour empêcher les attaques CSRF; 4. Configurer le routage d'URL vers Point / Contact / vers la vue Contact_View; Utilisez Modelform pour associer directement le modèle pour obtenir un stockage de données. Djangoforms implémente le traitement intégré de la vérification des données, le rendu HTML et les invites d'erreur, qui convient au développement rapide des fonctions de forme s?re.

L'introduction à l'arbitrage statistique L'arbitrage statistique est une méthode commerciale qui capture l'inadéquation des prix sur le marché financier basé sur des modèles mathématiques. Sa philosophie principale découle de la régression moyenne, c'est-à-dire que les prix des actifs peuvent s'écarter des tendances à long terme à court terme, mais reviendront éventuellement à leur moyenne historique. Les traders utilisent des méthodes statistiques pour analyser la corrélation entre les actifs et rechercher des portefeuilles qui changent généralement de manière synchrone. Lorsque la relation de prix de ces actifs est anormalement déviée, des opportunités d'arbitrage se présentent. Sur le marché des crypto-monnaies, l'arbitrage statistique est particulièrement répandu, principalement en raison de l'inefficacité et des fluctuations drastiques du marché lui-même. Contrairement aux marchés financiers traditionnels, les crypto-monnaies fonctionnent 24h / 24 et leurs prix sont très susceptibles de briser les nouvelles, les sentiments des médias sociaux et les améliorations technologiques. Cette fluctuation des prix constante crée fréquemment un biais de prix et fournit aux arbitrageurs un
