Open christian66-gif opened 1 year ago
Bonjour ... le petit Bug peut être résolu simplement en mettant 2 accolades '{}' dans le fichier classe.json. ou utiliser la méthode os.path.getsize() pour vérifier si le fichier est vide , Dans Exercice 10 Les Fichiers Graven nous présente le module os .😉
from tkinter import * #module pour l'interface graphique
from tkinter import messagebox #module pour gerer la boite "Erreur"
import json #module pour gerer des fichiers avec extention .json (java)
import os #module pour gerer les fichiers
with open('classe.json', 'r+') as fichier: #importer le fichier classe.json
if os.path.getsize('classe.json') == 0: #vérifier si le fichier est vide
eleves = {} #creer un dictionnaire vide
else:
eleves = json.load(fichier) #charge le dictionnaire dans la variable 'eleves'
Bonjour ... évolution du code .... vérifier si le fichier existe ... sinon créer un nouveau fichier... Exercice 3 Les Conditions😉
ajout d'un bouton quitter .... définition d'une fonction afficher() .
eleves = {} #creer un dictionnaire vide
def sauver(): #sauver ou creer un nouveau dictionnaire
with open('classe.json', 'w+') as fichier:
json.dump(eleves, fichier)
if os.path.exists('classe.json'): #verifier si le fichier existe
with open('classe.json', 'r+') as fichier: #importer le fichier
if os.path.getsize('classe.json') == 0: #vérifier si le fichier est vide
eleves = {} #creer un dictionnaire vide
else:
eleves = json.load(fichier) #ouvrir le fichier
else:
#message pour informer l'utilisateur
messagebox.showinfo('INFORMATION', "Un nouveau fichier classe.json va être crée dans votre repertoire !")
sauver() #creer un nouveau fichier
message reçu si le fichier n'existe pas
la fonction afficher() .... Exercice 6 Les Fonctions 😉
def afficher(): #afficher le dictionnaire élèves,
global label4
label4.delete(1.0, END) #nettoyer le label.Text()
for eleve in sorted(eleves): #tri alphabetique
note = eleves[eleve]['note'] #ciblage des variables vers les clés du dictionnaire
appreciation = eleves[eleve]['appreciation']
#inserer dans le dictionnaire les entrées de l'utilisateur pour les afficher dans le label.Text()
label4.insert(END, f'{eleve}: note= {note}, appreciation= {appreciation}\n')
label4.update()
afficher() #appel de la fonction
Bonjour ... faire la moyenne des notes d' un dictionnaire imbriqué ... sauvé en fichier.json ... Whaoo... c'est bien beau 😊.
"Lorsque vous sauvegardez un dictionnaire en tant que fichier JSON, toutes les valeurs sont converties en chaînes de caractères (strings) et entourées de guillemets doubles ..." BingAI's My Friend 😉 Exercice 4 Les Listes ...Exerccice 5 Les boucles ...
def moy(): #moyenne des notes
for eleve in eleves.values():
eleve['note'] = int(eleve['note']) # transforme la valeur de la clé 'note'...[v['note']] ...en entier
moyenne = round(sum([v['note'] for v in eleves.values()]) / len(eleves)) #moyenne des valeurs de la clé ['note']
champ4.delete(0, END)
champ4.insert(0, moyenne)
int(eleve['note'])
m'envoi en console "ValueError: invalid literal for int() with base 10: 'a' " si l'entrée utilisateur dans
'note' n'est pas un entier ou vide ... Exercice 2 Les Variables ...revoir les concaténations va m'aider .
Bonjour ... ValueError corrigé en vérifiant les entrées utilisateur avec la méthode isdigit() dans la fonction ajouter() .
def ajouter(): #ajouter ou modifier un élève
eleve = champ1.get()
if champ2.get().isdigit() and 0 <= int(champ2.get()) <= 20: # si un nombre entier de 0 a 20 inclus
note = champ2.get() #affectation des entrées utilisateur aux variables
appreciation = champ3.get() #eleve/ note/ appreciation avec la methode champ.get()
eleves[eleve] = {'note': note, 'appreciation': appreciation}
afficher() #rafraichir et afficher le texte
else:
messagebox.showwarning("ATTENTION", f"la note de {eleve} n'est pas une entrée valide !\n"
"entrez un nombre entier de 0 à 20 inclus ")
message si l'utilisateur entre des caractères autres qu'un nombre entier de 0 à 20 inclus
Modification de la fonction afficher() ... 3 colonnes en utilisant Tkinter 😉 Exercice 9 Interface Graphique
def afficher(): #afficher le dictionnaire élèves,
global label4, label5, label6
for label in [label4, label5, label6]:
label.delete(1.0, END) #nettoyer les labels.Text()
for eleve in sorted(eleves): #tri alphabetique
note = eleves[eleve]['note'] #ciblage des variables vers les clés du dictionnaire
appreciation = eleves[eleve]['appreciation']
label4.insert(END, f'{eleve} \n') #insertion des valeurs associées aux clés du dictionnaire
label5.insert(END, f'{note} \n') #dans 3 labels différents (colonnes)
label6.insert(END, f'{appreciation} \n')
label4, label5, label6.update()
Bonjour .... j'ai utilisé pour implémenter ce code la PlayList Apprendre Le Python proposées par Graven Dev .. Je ne suis ni programmeur ni développeur et grâce au partage de son savoir ... Graven m'a aidé à comprendre les bases de Python. Merci Beaucoup Graven ...,
Le code actuel Exercice 11 Les Dictionnaires TP ... je ne suis pas arrivé á intégrer les exercices sur Les Objects et Les Heritages ... je suis trop loin dans ce code... je mélange tout ... je devais penser Object ... au tout début de ce projet TP . 😉 je me mélange les pinceaux avec les (name == main) .
def main():
python = ['Simple', 'Puissant', 'Communautaire']
print('Python est', python[2], 'trés', python[1], 'et', python[0])
if __name__ == '__main__':
main()
Graven Dev : Exercice 11 Les Dictionnaires
Bonjour j'ai tenté de relever le chalenge lancé par Graven 😉... Apprendre Le Python Mon premier code qui s'execute sans "TypeError" 😊 <<TP Exercice 11 Les Dictionnaires>> La mise en page Grid... j'y suis arrivé en suivant les conseils de Wicotech: Methode Grid... il reste un petit bug ... si le fichier classe.json est vide... le code renvoi une erreur . j'aurais aimé avoir une sortie texte ...index /colonne... mais c'est un niveau sup ... Panda 🐼
Gif Animés avec Gimp
message reçu si l'utilisateur supprime un élève qui n'existe pas.