Aller au contenu

programme python


Erevent

Messages recommandés

Nouveau, 25ans Posté(e)
Erevent Nouveau 1 message
Baby Forumeur‚ 25ans‚
Posté(e)

j'ai créé un script sur python pour apprendre mon vocabulaire en allemand mais les fichiers ne sont pas sauvegardé. Le fichier sequenz_drei.pickle existe bel et bien avec des mots enregistrées au préalable. Merci d'avance  à ceux qui pourront m'aider.

Voici le script en question :

import pickle
from random import *
from colorama import Fore

list_De = []
list_Fr = []
list_otherword = []
loop = "1"


def save_load():
    try:
        with open("sequenz_drei.pickle", "rb") as f:
            list_De, list_Fr = pickle.load(f)
        print("Vocabulaire chargé!")
    except FileNotFoundError:
        print("Le fichier 'sequenz_drei.pickle' n'a pas été trouvé.")


def save_dump():
    with open("sequenz_drei.pickle", "wb") as f:
        pickle.dump([list_De, list_Fr], f)
    print("Vocabulaire sauvegardé")


save_load()
while loop == "1" or loop == "oui" or loop == "o" or loop == "yes":
    nb_word = len(list_Fr)
    print(Fore.RED + "-------------------MENU----------------------")
    print(" ")
    print(Fore.RESET + "1= ajouter des nouveaux mots")
    print("2= s'entrainer ")
    print("3= montrer tous les mots")
    print("4= rechercher un mot")
    print("5= suprimmer un mot")
    print("6= supprimer tous les mots")
    print(" ")
    print(Fore.RED + "---------------------------------------------")
    x = int(input(Fore.RESET + "--> "))

    # ajouter des nouveaux mots
    if x == 1:
        print("Combien de mot veux-tu rajouter?")
        nb_new_word = int(input("--> "))
        for i in range(1, nb_new_word + 1):
            print(i, "mot en français :")
            fr_new_word = str(input("--> "))
            list_Fr.append(fr_new_word)
            print(i, "et sa traduction :")
            de_new_word = str(input("--> "))
            list_De.append(de_new_word)
        save_dump()
        save_load()

    # s'entrainer
    elif x == 2:
        loop2 = int(input("Combien veux tu de mots à traduire? --> "))
        print(" ")
        answer_true = 0
        answer_false = 0
        for i in range(1, loop2 + 1):
            nb_word = len(list_Fr)
            random = randint(0, nb_word - 1)
            random_word = list_Fr[random]
            for random_word in list_otherword:
                random_word = list_Fr[random]
                if len(list_Fr) == len(list_otherword):
                    list_otherword = []
                    print(Fore.GREEN + "Bravo tu as répondu à tous les mots" + Fore.RESET)
            list_otherword += [random_word]
            print(i, " Mot aléatoire : ", random_word)
            answer = str(input(Fore.CYAN + "quelle est sa traduction? --> "))
            if answer == list_De[random]:
                print(Fore.RESET + "bravo")
                print("  ")
                answer_true += 1
            else:
                print(Fore.RESET + "dommage, sa traduction était", list_De[random])
                print(" ")
                answer_false += 1
        true_pourcent = int(answer_true / loop2 * 100)
        if true_pourcent >= 90:
            answer2 = Fore.GREEN + 'Félicitation'
        elif true_pourcent >= 70:
            answer2 = Fore.GREEN + 'bravo'
        elif true_pourcent >= 50:
            answer2 = Fore.YELLOW + 'Bof'
        elif true_pourcent >= 30:
            answer2 = Fore.LIGHTRED_EX + 'Peut mieux faire'
        elif true_pourcent >= 10:
            answer2 = Fore.RED, 'Va falloir réviser sérieusement'
        else:
            answer2 = "Abandonne l'allemand"
        print(answer2, Fore.RESET, ",tu as ", true_pourcent, "% de réussite")
        print(" ")

    # voir la liste des mots
    elif x == 3:
        print("mot en français".rjust(6), "mot en allemand".rjust(38))
        for i in range(0, nb_word):
            if i % 2 == 0:
                print(Fore.LIGHTBLUE_EX, end="")
            else:
                print(Fore.RESET, end="")
            print((str(i + 1) + " : ").rjust(5), list_Fr[i].ljust(30), " ", (str(i + 1) + " : ").rjust(5), list_De[i])

    elif x == 4:
        search_word = str(input("Quelle mot recherche tu? (en français) "))
        if search_word in list_Fr:
            index = list_Fr.index(search_word)
            print("Oui il est rentré dans le programme")
            search_word_De = list_De[index]
            print("Sa traduction est : ", search_word_De)
        else:
            print("Il n'est pas rentré dans le programme")
            de_new_word = str(input("Quelle est sa traduction"))
            list_Fr.append(search_word)
            list_De.append(de_new_word)
            print("vocabulaire sauvegardé")

    # supprimer un mot
    elif x == 5:
        print("Entrez le mot en français à supprimer :")
        word_to_delete = str(input("--> "))
        if word_to_delete in list_Fr:
            index = list_Fr.index(word_to_delete)
            del list_Fr[index]
            del list_De[index]
            save_dump()
            save_load()
            print("Mot supprimé avec succès!")
        else:
            print("Mot non trouvé dans la liste")

    elif x == 6:
        x2 = str(input("Est-tu vraiment sur de vouloir supprimer TOUS les mots? "))
        if x2 == "1" or x2 == "oui" or x2 == "o" or x2 == "yes" or x2 == "y":
            list_Fr = []
            list_De = []
            print(Fore.RED + "Tous les mots ont bien été supprimés" + Fore.RESET)
    else:
        print(Fore.RED + "T'as surement mal écris" + Fore.RESET)

    # boucle
    loop = str(input(Fore.RESET + "retour au menu? "))
    print("fin du programme!")
Lien à poster
Partager sur d’autres sites

Annonces
Maintenant
Invité Quasi-Modo
Invités, Posté(e)
Invité Quasi-Modo
Invité Quasi-Modo Invités 0 message
Posté(e)

Je pense que tu devrais modifier ta fonction de chargement de mots :

def save_load():
    global list_De
    global list_Fr
    try:
        with open("sequenz_drei.pickle", "rb") as f:
            list_De, list_Fr = pickle.load(f)
        print("Vocabulaire chargé!")
    except FileNotFoundError:
        print("Le fichier 'sequenz_drei.pickle' n'a pas été trouvé.")

Cela dit tu sembles avoir d'autres bugs.

La déclaration avec le mot clé global est nécessaire si tu veux modifier une variable globale dans une fonction.

Je te souhaite de devenir fort en allemand !

Lien à poster
Partager sur d’autres sites

Membre, Explorateur de Nuages, 47ans Posté(e)
Pheldwyn Membre 25 236 messages
47ans‚ Explorateur de Nuages,
Posté(e)

Je connais très peu Python mais bon des idées à tout hasard :

- c'est normal de ne pas fermer les fichiers après lecture ou écriture ? (L' accès en lecture n'empêche pas le suivant en écriture ? Quid en sauvant sous un autre nom de fichier ?).

- le programme a t-il bien les droits d'écriture sur le fichier ou le répertoire ? (Du coup les conseils de Quasi-Modo sont pertinents, car un try va au moins t'avertir des erreurs d'accès au fichier).

- que se passe t'il si tu affiches les tableaux avant d'écrire ? Sont-ils conformes et remplis ? L'erreur se passe t'elle à l'écriture, ou alors les tableaux ne sont-ils pas remplis convenablement ?

- et sinon, tu peux aussi faire une fonction de test, qui écrit un terme (définit en dur dans le programme) en utilisant ta fonction d'écriture (bref, tester un fonctionnement plus élémentaire).

 

Note: bon après l'absence du global s'il est nécessaire explique à lui seul que ça ne fonctionne pas.

Lien à poster
Partager sur d’autres sites

Membre, Explorateur de Nuages, 47ans Posté(e)
Pheldwyn Membre 25 236 messages
47ans‚ Explorateur de Nuages,
Posté(e)

Ah aussi, petite remarque sur une bonne pratique pour le nommage des fonctions (ouai, je sais, ce n'est pas le but de ta question, mais ça m'a piqué les yeux) : save_load... :mef2:

Le nom est très mal choisi, car il est antinomique.

Ta fonction charge ton fichier (ok, c'est un fichier de sauvegarde), il ne faut pas faire apparaitre save, sinon on ne comprends plus rien.

Appelle le load_file, load_data, load_words, .... Enfin comme tu veux, mais pas save_load ;). Et du coup en parallèle save_[le terme que tu préfères] plutôt que save_dump.

Lien à poster
Partager sur d’autres sites

Membre, 57ans Posté(e)
SpookyTheFirst Membre 3 711 messages
Maitre des forums‚ 57ans‚
Posté(e)

Poste la totalité de ton code dans à ChatGPT et demande lui la réponse, souvent il trouve des solutions. Alternativement, tu peux aussi lui dire ce que ton programme doit faire, et il te sortira le code python (ou autre).

Lien à poster
Partager sur d’autres sites

Membre, #GauloisRéfractaire, Posté(e)
LulzLamo Membre 4 233 messages
#GauloisRéfractaire,
Posté(e)

ChatGPT ;

J'ai apporté les corrections suivantes à votre code :

J'ai enlevé les importations inutiles pour le code.
J'ai déplacé la déclaration de la liste list_otherword pour éviter les erreurs de définition.
J'ai ajouté un message d'erreur pour gérer la cas où la sauvegarde des mots n'a pas pu être effectuée.
J'ai amélioré la lisibilité du code en utilisant des noms de variables plus explicites.
J'ai corrigé les erreurs de logique dans les conditions if et while.
J'ai corrigé les erreurs de syntaxe dans les instructions print.

import pickle
from random import randint
from colorama import Fore

list_De = []
list_Fr = []
list_otherword = []

def save_load():
    try:
        with open("sequenz_drei.pickle", "rb") as f:
            list_De, list_Fr = pickle.load(f)
        print("Vocabulaire chargé!")
    except FileNotFoundError:
        print("Le fichier 'sequenz_drei.pickle' n'a pas été trouvé.")

def save_dump():
    with open("sequenz_drei.pickle", "wb") as f:
        pickle.dump([list_De, list_Fr], f)
    print("Vocabulaire sauvegardé")

save_load()

while True:
    nb_word = len(list_Fr)
    print(Fore.RED + "-------------------MENU----------------------")
    print(" ")
    print(Fore.RESET + "1= ajouter des nouveaux mots")
    print("2= s'entrainer ")
    print("3= montrer tous les mots")
    print("4= rechercher un mot")
    print("5= suprimmer un mot")
    print("6= supprimer tous les mots")
    print("7= quitter")
    print(" ")
    print(Fore.RED + "---------------------------------------------")
    x = int(input(Fore.RESET + "--> "))

    # ajouter des nouveaux mots
    if x == 1:
        print("Combien de mots veux-tu ajouter?")
        nb_new_word = int(input("--> "))
        for i in range(1, nb_new_word + 1):
            print(i, "mot en français :")
            fr_new_word = str(input("--> "))
            list_Fr.append(fr_new_word)
            print(i, "et sa traduction :")
            de_new_word = str(input("--> "))
            list_De.append(de_new_word)
        save_dump()
        save_load()

    # s'entrainer
    elif x == 2:
        loop2 = int(input("Combien veux-tu de mots à traduire? --> "))
        print(" ")
        answer_true = 0
        answer_false = 0
        for i in range(1, loop2 + 1):
            nb_word = len(list_Fr)
            random = randint(0, nb_word - 1)
            random_word = list_Fr[random]
            for random_word in list_otherword:
                random_word = list_Fr[random]
                if len(list_Fr) == len(list_otherword):
                    list_otherword = []
                    print(Fore.GREEN + "Bravo, tu as répondu à tous les mots." + Fore.RESET)
            list_otherword += [random_word]
            print(i, "Mot alé

 

Lien à poster
Partager sur d’autres sites

Membre, Le prendre au sérieux, nuit gravement à la santé, Posté(e)
azad2B Membre 5 932 messages
Le prendre au sérieux, nuit gravement à la santé,
Posté(e)
# ! /usr/bin/env python3
# -*- coding: utf-8 -*-
import numpy
from pickle import *

list_En = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'hundred', 'thousand']
list_Fr = ['un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit', 'neuf', 'dix', 'cent', 'mille']
def cree_le_dico_En_Fr():
    dictionnaire = dict(zip(list_En,list_Fr))
    return dictionnaire

dictionnaire = cree_le_dico_En_Fr()
print(dictionnaire)

numpy.save('file.npy',dictionnaire)

new_dict = numpy.load('file.npy', allow_pickle='TRUE')
print(new_dict)

Voilà, c'est tout.

Evidemment il te faut créer les deux liste une en anglais l'autre en français.Tu peut les faire aussi grande que tu le souhaite. La condition est quelles doivent avoir le même nombre d'éléments et ... qui doivent être dans le bon ordre.

Tes deux listes étant crées, la fonction "cree_le_dico_En-Fr" crée comme son nom l'indique un dictionnaire Anglais/Français. On peut l'imprimer pour vérification.

Ensuite la ligne numpy.save('file.npy',dictionnaire sauve sur ton disque dur et dans le répertoire où se trouve ton script Python un fichier nommé file.npy que tu peux éditer comme je l'ai fait ici.

La suite est évidente : tu as un dictionnaire disponible et tu peux broder comme tu le veux en posant des questions en tirant au hasard une clé dans ton (ou tes) dictionnaires. Et comme toujours, ceci est un squelette qui ne demande qu'à se doter de chair et de peau et à évoluer jusqu'à concurrencer Larousse si tu le souhaite. Bon courage

 

Lien à poster
Partager sur d’autres sites

Membre, Posté(e)
Pénélope. Membre 494 messages
Forumeur alchimiste ‚
Posté(e)

! /me/lost/here*

!# humpff-:s

# -*- return-to-my-kitchen -*-

 

ps: *!#bip-bip*"

Lien à poster
Partager sur d’autres sites

Annonces
Maintenant

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×