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 :

[Résolu] Ma fonction ne modifie pas la variable globale


Sujet :

Python

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 54
    Points : 32
    Points
    32
    Par défaut [Résolu] Ma fonction ne modifie pas la variable globale
    Bonjour,

    j'essaye de faire une fonction qui me donne un entier aléatoire présent dans une liste, puis l'efface de la liste.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    from random import *
    liste_exos=[ i for i in range(1,121) ]
     
    def oral():
        global liste_exos
        n=len(liste_exos)
        i=randint(1,n)
        return liste_exos[i]
        liste_exos.remove(liste_exos[i])
    Cependant la liste n'est pas modifiée, quelle en est la raison ?

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Relisez votre prose: lorsque l'interpréteur rencontre "return" la fonction se termine.
    Ce que vous avez écrit après est du "dead code".

    Virez le "global" et essayez de comprendre pourquoi il ne sert à rien dans ce cas là.

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

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 54
    Points : 32
    Points
    32
    Par défaut
    D'accord merci, j'ai modifié la chose :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    from random import *
    liste_exos=[ i for i in range(1,121) ]
     
    def oral():
     
        n=len(liste_exos)
        i=randint(1,n)
        exo=liste_exos[i]
        liste_exos.remove(exo)
        return exo
    Ca fonctionne bien, en revanche j'aimerais que la liste soit modifiée " définitivement ", c'est-à-dire qu'elle ne soit pas réinitialisé à sa valeur liste_exos=[ i for i in range(1,121) ] à chaque fois que je ferme python. Y a-t-il un moyen simple de " sauvegarder " la modification de la liste ?

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    Tu peux utiliser le module pickle pour ça:

    Python 2: https://docs.python.org/2/library/pi...=pickle#pickle
    Python 3: https://docs.python.org/3/library/pi...#module-pickle

    Tu peux aussi simplifier ton random avec choice()
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    from random import choice
     
    def oral():
        n = choice(liste_exos)
        liste_exos.remove(n)
        return n

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Wenneguen Voir le message
    Ca fonctionne bien, en revanche j'aimerais que la liste soit modifiée " définitivement ", c'est-à-dire qu'elle ne soit pas réinitialisé à sa valeur liste_exos=[ i for i in range(1,121) ] à chaque fois que je ferme python. Y a-t-il un moyen simple de " sauvegarder " la modification de la liste ?
    "sauvegarder" = écrire la liste dans un fichier et la relire au début du programme ou la créer si elle n'existe pas.
    Il y a plein de solutions mais apprendre passe par faire chauffer ses neurones pour qu'ils impriment.

    Comment feriez vous?
    Potasser le Swinnen chapitre 11 serait un bon début pour avoir les idées plus claires.

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

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 54
    Points : 32
    Points
    32
    Par défaut
    Merci c'est bon j'ai réussi grâce à " pickle "

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Wenneguen Voir le message
    Merci c'est bon j'ai réussi grâce à " pickle "
    Tant pis pour vous.

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

  8. #8
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2012
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2012
    Messages : 54
    Points : 32
    Points
    32
    Par défaut
    ?

    Rassurez-vous j'ai été voir ici comment ça marchait : http://python.developpez.com/cours/a.../?page=page_11

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Wenneguen Voir le message
    Rassurez-vous j'ai été voir ici comment ça marchait : http://python.developpez.com/cours/a.../?page=page_11
    Cool.

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 27/02/2014, 10h15
  2. Réponses: 21
    Dernier message: 19/05/2011, 16h03
  3. Variable d'une boucle qui ne se modifie pas
    Par Erast dans le forum Débuter
    Réponses: 4
    Dernier message: 17/04/2010, 20h25
  4. [Smarty] Fonction pour modifier la variable
    Par kev484 dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 05/02/2009, 11h12
  5. Réponses: 2
    Dernier message: 26/03/2007, 17h25

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