IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Traducteur, des améliorations à proposer ?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 29
    Par défaut Traducteur, des améliorations à proposer ?
    Bonjour/Bonsoir à tous, aujourd'hui j'ai écris un petit traducteur français/espagnol pour entraîner mon python et j'aimerai obtenir des retours pour améliorer mon niveau, mon code fonctionne mais je pense qu'il n'est pas top, alors premièrement j'ai récupérer un .csv avec à l'intérieur une ligne du mot français et une autre du mot espagnol (voici le lien : https://www.transfernow.net/307wy9321fay) avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    fichier = open("vocabulaire.csv", "r") # Ouverture du fichier vocabulaire.csv
    dico = fichier.read() #Lecture du fichier
     
    dico = dico.replace('"',"") #Supprimer les apostrophes
    dico = dico.split("\n")
     
    dico_trad = {}
     
    for v in dico:
    	mot = v.split(",")
    	if mot == ['']:
    		pass
    	else:
    		dico_trad[mot[0]] = mot[1]
     
    del dico_trad["Français"]
    et voici le code du traducteur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    from vocabulaire import dico_trad
     
    score = 0
    total = 0
     
    while total < 20:
     
    	for k, v in dico_trad.items():
     
    		if total == 20:
    			break
     
    		rep = input("Traduisez : {} ".format(k))
     
    		if dico_trad[k] == rep:
    			print("Juste\n")
    			score += 1
    			total += 1
     
    		else:
    			print("Faux")
    			print(k, "se traduit par", v, "\n")
    			total += 1
     
    print("Tu as obtenu une note de {} sur {}".format(score, total))
    J'ai chercher pendant une heure pour pouvoir retourner un mot aléatoire du dictionnaire mais je n'ai pas trouvé.
    Merci d'avance

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    Salut

    Alors pour améliorer je dirais :
    1) Ce n'est pas un traducteur, c'est plutot un programme faisant faire à l'utilisateur un exercice de traduction.
    2) Nommez mieux vos variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for v in dico:
    	mot = v.split(",")
    	if mot == ['']:
    		pass
    	else:
    		dico_trad[mot[0]] = mot[1]
    Qu'est v ? Une correspondance ou traduction je suppose. Donc on lui en donne explicitement le nom.
    mot, ce n'est qu'un seul mot ? Non. Donc il faut lui mettre un s. C'est relativement important, car en python on voit très souvent des choses de ce style :
    mot est un string, mots est une liste de string,
    3) Si mot ,(que vous devriez rebaptiser mots) n'est pas vide alors vous supposez qu'il est de longueur 2. Et si jamais il y a une ptite faute dans votre fichier csv, et que cette variable est de longueur 1 ou 3, il se passe quoi ? Une sécurité peut-être mise ici.
    4) pour tirer au sort N éléments dans un dictionnaire, mettre au début du code :
    et remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for k, v in dico_trad.items():
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for k,v in random.sample(list(dico_trad.items()),N):
    (en prenant soin de définir N avant)

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    29
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 29
    Par défaut
    Merci pour tes conseils je vais améliorer cela. Je suis actuellement entrain de voir la POO avec les classes et les méthodes, est-ce que dans ce petit programme j'aurai pu les utiliser ? Si oui, où et pourquoi ?

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur calcul scientifique
    Inscrit en
    Mars 2013
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur calcul scientifique

    Informations forums :
    Inscription : Mars 2013
    Messages : 1 229
    Par défaut
    On peut toujours utiliser la POO. Après c'est pas forcément toujours utile, mais ceci dit si c'est pour t'exercer, un cas simple c'est très bien

    Mais avant d'en arriver là, je te conseillerais de faire des fonctions déjà. Ca permetterait :
    1) de donner plus de sémantique à ton code (car les nom de fonction on les choisi aussi judicieusement pour qu'on comprenne rapidemment ce que fait la fonction).
    2) d'isoler les différentes tâches en blocs élémentaires. Si un jour tu souhaites changer la manière dont tu résoud une tâche précise, tu changes juste la fonction et pas tout ton code.
    3) tu pourras ainsi regrouper tes 2 fichiers en 1 seul, car le découpage ici n'est pas forcément utile.
    4) ce sera plus facile après pour mettre de la POO dessus car tes classes vont regrouper des attributs (des variables) et des méthodes (des fonctions de classes)

Discussions similaires

  1. Des idées, des améliorations ?
    Par imikado dans le forum MkFramework
    Réponses: 4
    Dernier message: 24/04/2013, 08h54
  2. Encore des améliorations de performances pour PHP futur
    Par Invité dans le forum Actualités
    Réponses: 0
    Dernier message: 21/05/2010, 19h07
  3. Réponses: 5
    Dernier message: 01/12/2009, 19h18
  4. Crimson editor: des améliorations, des alternatives?
    Par Christophe30 dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 02/02/2008, 11h21
  5. Réponses: 20
    Dernier message: 19/12/2004, 18h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo