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 :

Redondance du code


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 63
    Par défaut Redondance du code
    Bonjour à tous

    J'ai le code suivant :
    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    from csv import *
     
    enqueteSommeil=open("EnqueteSommeilI.csv","r")
     
    nbH=0
    nbF=0
    nb35=0
    nb50=0
    nb51=0
    nb60=0
     
    lecteur=reader(enqueteSommeil)
    for ligne in lecteur:
        ligne2=ligne[0].split(";")
        #compte le nombre d'homme et de femme
        if ligne2[0]=="homme":
            nbH+=1
        else:
            nbF+=1
        #compte l'effectif par trache d'âge
        if ligne2[1]=="Moins de 35 ans":
            nb35+=1
        elif ligne2[1]=="De 35 à 50 ans":
            nb50+=1
        elif ligne2[1]=="De 51 à 60 ans":
            nb51+=1
        else:
            nb60+=1
     
    #nombre par sexe
    print("Le nombre total de répondant est de : ", nbF+nbH)
    print('')
    print("Le nombre de femme est de : ", nbF)
    print("Le nombre d'homme est de : ", nbH)
     
    #nombre par tranche d'âge
    print('')
    print("Le nombre de répondant de mois de 35 ans est de : ",nb35)
    print("Le nombre de répondant de 35 - 50 ans est de : ",nb50)
    print("Le nombre de répondant de 51 - 60 ans  est de : ",nb51)
    print("Le nombre de répondant de plus de 60 ans est de : ",nb60)
     
     
     
    enqueteSommeil.close()
    Est-il possible de mettre des def pour les codes suivants ? Notamment pour le sexe et l'age ?
    Si oui, comment l'appelez vous après car j'ai essayé mais cela ne fonctionne pas !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Citation Envoyé par pun79 Voir le message
    Est-il possible de mettre des def pour les codes suivants ? Notamment pour le sexe et l'age ?
    Yes!

    Si oui, comment l'appelez vous après car j'ai essayé mais cela ne fonctionne pas !
    Vous faites comme tout le monde, vous ouvrez un tuto. et vous potassez le chapitre sur les fonctions: ils sont faits pour çà.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 63
    Par défaut
    Je reviens vers vous car je suis aller voir comme vous m'avez indiqué les cours.

    Pour cela j'ai fais ça :
    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
    from csv import *
    enqueteSommeil=open("EnqueteSommeilI.csv","r")
     
    lecteur=reader(enqueteSommeil)
     
    def essai():
        nbH=0
        if ligne2[0]=="homme":
            nbH+=1
        return nbH
     
    for ligne in lecteur:
        ligne2=ligne[0].split(";")
        nbh=essai()
     
     
    enqueteSommeil.close()
     
    print(nbh)
    Cependant quand je mets ça comme ça, il me met m'affiche 1 car il redémarre à 0 à chaque nouvelle appel de fonction.
    J'ai donc essayé de le mettre avant le def, mais il m'affiche "UnboundLocalError: local variable 'nbH' referenced before assignment"

    Avez vous une solution ?

    En vous remerciant

  4. #4
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2020
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2020
    Messages : 63
    Par défaut
    J'ai mis un global nbH dans la fonction et j'ai initialisé nbH=0 avant la fonction, et ça fonctionne.

    Mais je ne suis pas sur que cela très homologué. Avez vous une meilleur solution que de mettre un global nb ?

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 754
    Par défaut
    Salut,

    Citation Envoyé par pun79 Voir le message
    Mais je ne suis pas sur que cela très homologué. Avez vous une meilleur solution que de mettre un global nb ?
    Écrire une fonction qui retourne 0 ou 1 en fonction du résultat du test d'une condition, c'est luxe mais pourquoi pas, c'est aussi formateur!
    C'est juste ce qu'on apprend à faire avec un tuto.
    Apprendre, ce n'est pas survoler, c'est passer aussi du temps à faire les exercices (nombre d'entre eux sont corrigés).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre confirmé
    Homme Profil pro
    Curieux
    Inscrit en
    Avril 2020
    Messages
    114
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2020
    Messages : 114
    Par défaut
    Peut être une solution içi, si j'ai bien compris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    a=12
    def tagada():
        a=25
        return (a)
    print('local',a)
    print(tagada())
    print('local',a)
    a = tagada()
    print('local',a)
    Je dirais simplement réassigner la local une fois la fonction executée, peut être?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redondance de code entre librairies
    Par DSGSLA dans le forum C++
    Réponses: 2
    Dernier message: 31/08/2009, 10h54
  2. Boucle for pour éviter la redondance de code
    Par zaza85270 dans le forum Langage
    Réponses: 15
    Dernier message: 10/11/2008, 16h19
  3. delegate et redondance de code
    Par duaner dans le forum C#
    Réponses: 5
    Dernier message: 22/06/2007, 16h57
  4. [HTML]Eviter les redondances de code
    Par Pfeffer dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 30/12/2005, 09h13

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