christian66-gif / pythonProject

0 stars 0 forks source link

Exercice 11 Les Dictionnaires #1

Open christian66-gif opened 1 year ago

christian66-gif commented 1 year ago

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

image

message reçu si l'utilisateur supprime un élève qui n'existe pas.

image
christian66-gif commented 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 .😉

code


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'
image
christian66-gif commented 1 year ago

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
image

message reçu si le fichier n'existe pas

image

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
christian66-gif commented 1 year ago

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 .

image
christian66-gif commented 1 year ago

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

image

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()
image
christian66-gif commented 1 year ago

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()
image