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 :

Python 3.9 Fonction "def" et boucle for : Variable reset à chaque appel ?


Sujet :

Python

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut Python 3.9 Fonction "def" et boucle for : Variable reset à chaque appel ?
    Bonjour et bonne année !

    Voila j'ai un peu de mal avec la fonction "def" et la boucle "for"
    Je me rends compte que a chaque appel de la fonction ou nouveau passage dans ma boucle for. Mes variables reviennent à zéro.
    J'ai testé en faisant un petit compteur tout bête comme si dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    # Mon test de fonction compteur
    def Test(PremierCycle=MemoPremierCycle, memo=1):
        if PremierCycle == 1: compteur=0
        if (memo == 1):
            compteur = compteur + 1
        elif (memo == 0):
            compteur = 0
        print("testcompteur****************", compteur)
     
    #Appel de la fonction
    Test()
    Du coup comment faire si je veux pas que mon compteur reparte de 0 a chaque nouvelle appel ?
    L'idée serait de le laisser s'incrémenter.

    Merci à vous.

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def Test():
        Test.compteur += 1
        print(Test.compteur)
    Test.compteur = 0
     
    Test()
    Test()
    Test()

  3. #3
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut
    Merci pour ta réponse mais se n'est pas se que je recherche.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while(1):
        def Test2():
            Test2.compteur += 1
            print(Test2.compteur)
        Test2.compteur = 0
     
        Test2()
    Le compteur reste à 1 il s'incrémente pas.

    Ce que je veux c'est que mon compteur s'incrémente mais avec un seul appel de ma fonction.

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 1 068
    Par défaut
    Effectivement ça peut pas fonctionner comme ça... Ja passe mon tour.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Je dois pas bien comprendre le problème, parce que c'est basique :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    >>> compteur = 0
    >>> def test():
    ...     global compteur
    ...     compteur += 1
    ... 
    ...     
    >>> test()
    >>> test()
    >>> compteur
    2
    >>> test()
    >>> compteur
    3

  6. #6
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    C'est typiquement un travail pour une fonction génératrice.
    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
     
    >>> def get_count():
    ...     counter = 0
    ...     while 1:
    ...             counter += 1
    ...             yield counter
    ... 
    >>> gen = get_count()
    >>> for i in range(10):
    ...     print(next(gen))
    ... 
    1
    2
    3
    4
    etc ...

  7. #7
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2022
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2022
    Messages : 8
    Par défaut
    Bonjour, merci pour vos réponses.
    Effectivement mon probléme était ailleurs.
    En faite j'ai une condition qui active le compteur. Et cette condition est toujours nul.

    En faite j'ai un variable en entrée que je veux tester par rapport à ca valeur au cycle précédent. Mais je dois mal m'y prendre car ma VariableOld reste toujours à 0.

    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
     
    import random
    import time
     
    def Test2(InVariable=0,VariableOld=0):
        if (InVariable < VariableOld):
            Test2.compteur += 1
        VariableOld = InVariable
     
    Test2.compteur = 0
    Test2.VariableOld = 0
     
    while(1):
     
        variable = random.randint(0,100)
        Test2(InVariable=variable,VariableOld=Test2.VariableOld)
        print("variable", variable)
        print("variable old", Test2.VariableOld)
        print("compteur", Test2.compteur)
     
        time.sleep(2)

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Citation Envoyé par sacom Voir le message
    En faite j'ai un variable en entrée que je veux tester par rapport à ca valeur au cycle précédent. Mais je dois mal m'y prendre car ma VariableOld reste toujours à 0.
    Test2.VariableOld est un attribut de l'objet fonction référencé par la variable globale Test2 (assigné via le "def").
    VariableOld est une variable locale de cette fonction. Contrairement aux variables précédentes, elle n'existe que lorsque la fonction est "active".
    Pour les détails, trouvez un tuto et passez y du temps car on ne va pas vous raconter ces bases là dans un forum (et sans aucune idée de ce dont on parle, vous ne saurez pas chercher sur Internet non plus).

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

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    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 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par sacom Voir le message
    En faite j'ai un variable en entrée que je veux tester par rapport à sa valeur au cycle précédent. Mais je dois mal m'y prendre car ma VariableOld reste toujours à 0.
    Déjà je me demande bien pourquoi ta variableOld (typiquement une variable interne à la fonction) est reçue en paramètre... Une fonction ça se réfléchit...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #!/usr/bin/env python3
     
    import random
     
    def xxx(v):
    	if v < xxx.mem: xxx.cpt+=1
    	xxx.mem=v
     
    xxx.mem=0
    xxx.cpt=0
     
    for i in range(10):
    	v=random.randint(1, 100)
    	xxx(v)
    	print("i=%d, v=%d, cpt=%d, mem=%d" % (i, v, xxx.cpt, xxx.mem))
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. fonction colon pour cell (sans boucle for)
    Par soft001 dans le forum MATLAB
    Réponses: 1
    Dernier message: 11/09/2011, 13h11
  2. [Fonction] Quote et guillemet dans un textarea
    Par ddelec24 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/03/2007, 15h51
  3. Fonction Quoted printable qui ne fonctionne pas.
    Par leCcsympas dans le forum C
    Réponses: 3
    Dernier message: 13/01/2007, 18h54
  4. Inverse de la fonction QUOTE() ?
    Par __fabrice dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 13/07/2006, 10h39

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