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 :

programme calculant les moyennes depuis un fichier


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2013
    Messages : 1
    Points : 1
    Points
    1
    Par défaut programme calculant les moyennes depuis un fichier
    Bonjour, je dois réaliser un programme qui lit dans un fichier et calcul les moyennes selon différents critères. Néanmoins ne maitrisant pas encore python, je me demandais si quelqu'un aurait pu me venir en aide. voici les critères :

    # spécifications de la fonction attendue

    def calculer_moyenne( nom_fich_notes, nom_fich_res ) :
    """
    1)lire le fichier 'nom_fich_notes'
    chaque ligne de ce fichier contient
    * un nom (une suite de lettres)
    * suivi d'une note (un nombre compris entre 0 et 20)
    Le même nom peut apparaitre plusieurs fois.
    Les lignes ne sont pas nécessairement dans l'ordre alphabétique.

    2) calculer pour chaque nom la moyenne de ses notes
    écrire le résultat dans le fichier 'nom_fich_res',
    chaque ligne de ce fichier contient
    * un nom (une suite de lettres)
    * suivi de la note moyenne
    Chaque nom n'apparait qu'une seule fois.
    Les lignes sont classé dans l'ordre alphabétique.

    exemple :
    'notes.txt' contenant
    Pierre 5
    Paul 10
    Jacques 15
    Paul 12
    Pierre 10
    Pierre 15

    après l'appel
    calculer_moyenne('notes.txt', 'moy.txt')

    on aura le fichier 'moy.txt' contenant
    Jacques 15
    Paul 11
    Pierre 10

    """

    # Critères principaux de notation :
    # * Fonctionnement correcte de la fonction
    # * Fonction de test : couverture d'un maximum de cas

    # Critères secondaires :
    # * présentation des résultats
    # * Robustesse de la fonction : si des arguments sont incorrects, la fonction sort proprement
    # * Clarté du code, nom des fonctions et des variables
    # * Commentaires pour décrire chaque fonction
    # * Commentaires en cas de choix d'implémentation ou de subtilité de codage.


    merci par avance

  2. #2
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Salut

    Oui on est là pour t'aider. Ceci dit, "aider" ne signifie pas "faire le travail à ta place" (et si on réfléchit bien, ce serait même néfaste à long terme le jour où tu seras seul en entreprise).

    Donc pour t'aider on (je) peux juste t'indiquer les instructions de base

    1) traiter un fichier ligne par ligne
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fp=open("fichier", "r")
    for lig in fp:
        print lig
    # for
    fp.close()

    2) découper une ligne dont les informations sont séparées par ":"
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tab_info=lig.split(":")
    print tab_info  # Qui est un tableau

    3) transformer une chaine "12.23" en flottant
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var=float("12.23")
    print var, type(var)

    4) Travailler en décimal "exacte précision"
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    import decimal
    a=decimal.Decimal("12.23")
    print a, type(a)

    Avec ça, tu as tout pour réussir

  3. #3
    Membre éprouvé

    Homme Profil pro
    Ingénieur
    Inscrit en
    Août 2010
    Messages
    658
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2010
    Messages : 658
    Points : 1 158
    Points
    1 158
    Par défaut
    Salut,

    Pour compléter ce qui a été dit, si je devais réaliser cet exercice, j'utiliserais des dictionnaires.

    Le même nom peut apparaitre plusieurs fois.
    Les lignes ne sont pas nécessairement dans l'ordre alphabétique.
    Les clés du dicto seraient un nom (chaine de caractère), et la valeur associée une liste de flottant (les notes). A chaque ligne lue du fichier d'entré j'applique l'algorithme suivant:

    1- je découpe la chaine de caratère afin de récupérer le nom et la note
    2- je regarde dans mon dico si le nom en question figure déjà
    3- Si oui, je rajoute à sa liste de notes le flottant (après conversion du string)
    3- Si non, je rajoute une clé au dico et initie une liste associée avec la note

    Une fois fait, il ne reste plus qu'à traiter ce dico:

    4- Je parcours chaque clé du dico et calcul la moyenne de notes associées
    5- J'écris dans un ficheir texte le résultats sous la forme voulue

    L'excercice demandé est pas mal, il te fait voir des objets importants en python (listes, dico, fichiers,...), les fonctions, la gestion d'erreur, le caractère itérable de certains objets...

    Si tu veux progresser, essaye, rate, poste, écoute les autres et corrige... et recommence!

    Ju

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 721
    Points : 31 044
    Points
    31 044
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Julien N Voir le message
    Une fois fait, il ne reste plus qu'à traiter ce dico:

    4- Je parcours chaque clé du dico et calcul la moyenne de notes associées
    Allez, coup de pouce parce que je suis hyper sympa
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for (k, v) in dico.iteritems():
        print "nom: [%s], notes: [%s]" % (k, str(v))    # Je présume que "v" (la liste de notes) est un tuple/tableau
        # Eventuellement: for n in v: print n   # Affichera chaque note
    # for

    Citation Envoyé par Julien N Voir le message
    5- J'écris dans un ficheir texte le résultats sous la forme voulue
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    fp.write("ce que je veux sous la forme que je veux\n")

    Citation Envoyé par Julien N Voir le message
    Si tu veux progresser, essaye, rate, poste, écoute les autres et corrige... et recommence!
    +1

Discussions similaires

  1. Calcul d'une moyenne depuis un fichier
    Par koffitheo dans le forum C
    Réponses: 3
    Dernier message: 13/08/2013, 10h04
  2. Programme Calcul de moyenne
    Par tjfast78 dans le forum Débuter
    Réponses: 28
    Dernier message: 21/12/2010, 19h31
  3. Réponses: 3
    Dernier message: 20/08/2010, 21h48
  4. Programme calculant les racines d'un polynome de degré 2
    Par Invité dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/03/2007, 17h17

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