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 :

Portée et modification d'un set au travers d'une fonction?


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
    Décembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 11
    Par défaut Portée et modification d'un set au travers d'une fonction?
    Bonjour,
    j'ai besoin de créer une fonction permettant la modification d'un set entrée en paramètres, néanmoins si j'arrive a créer une copie locale de ce set à l'intérieur de la fonction et à le modifier en interne de cette fonction (ce qui en soi ne me sert à rien) je n'arrive pas à modifier le set entrée en paramètre (je ne sais pas si je suis très clair), enfin si mais je ne parviens qu'as l'effacer. Y a-t-il moyen de modifier des set() au travers de fonctions ou de créer des set de portées globales ?

    Voici l'appel de la fonction que j'ai réalisé et la fonction en elle même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GestionBlockEnVol(canvas, Image,CasePleine)

    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
    def GestionBlockEnVol(canvas, Mur, CP): #CP= Cases Pleines
     
            for J in range(len(CaseListe)):
                if len(CaseListe[J]) == NOMBRECASELARGEUR:
                    for i in CaseListe[J]:
                        canvas.delete(i)
                    SetInter1 = set()
                    SetInter2 = set()
                    SetInter3 = set() 
                    SetInter3 = CP.copy()
                    for l in CP:
     
                        if l[1]== J:
                            SetInter1.add(l)
                        if l[1] < J:
                            SetInter2.add((l[0],l[1]+1))
                            SetInter1.add(l)
     
                    CP.clear()
                    print("setInter3 ",SetInter3," SetInter1 ",SetInter1," SetInter2 ", SetInter2  )
                    CP = (SetInter3.difference(SetInter1)).union(SetInter2)
                    SetInter1.clear()
                    SetInter2.clear()
                    SetInter3.clear()
                    print("CP",CP)
    En sortie de fonction, CasePleine est vide mais CP contient plein d'éléments.

    Merci d'avance

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 11
    Par défaut
    On peut le voir aussi sur ce programme simplifié, aprés execution de la fonction, le set Call2 est vide, tandis que Call vaut 3, quelqu'un saurait comment résoudre ce probléme?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    def Set2(Call):
        Call.clear()
        Iter = set()
        Iter.add(3)
        print(Iter)
        Call = Iter.copy()
        print(Call)
    Call2= set()
    Call2.add(2)
    Set2(Call2)
    print(Call2)

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Citation Envoyé par MaDuDe Voir le message
    quelqu'un saurait comment résoudre ce probléme?
    Il y a 3 problèmes dans votre sujet.
    Concernant les "set", vous savez le "vider" avec "clear" (et donc le modifier) et vous savez aussi lui ajouter des éléments avec "add"... Donc vous pourriez avoir écrit une boucle qui ajoute les éléments d'un set à un autre.
    Et la question serait: "comment faire sans boucle?" (.update).

    Mais les soucis sont aussi avec:
    • "=" qui se contente d'associer un objet a une variable (sans modifier l'objet)
    • ou les fonctions: si elle reçoit un set en paramètre et qu'on le ré-écrit complètement... Pourquoi ne pas retourner un nouveau set en laissant intact le set reçu en paramètre et laisser à l'appelant décider de quoi en faire?


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

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 11
    Par défaut
    Ok, merci, j'ai remplacer le = par un update et ca a l'air de marcher même si je comprend pas trop pourquoi.

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Citation Envoyé par MaDuDe Voir le message
    même si je comprend pas trop pourquoi.
    Vu comment vous posez le problème, çà ne me surprend pas.
    Essayer de revoir les chapitres de votre tuto. préféré qui parlent des variables, de leur portées et des fonctions. Puis trouvez le chapitre qui parle des listes comme objet modifiable comparé aux chaines de caractères et entiers qui sont "non modifiables".
    Tant que ces choses là ne seront pas plus claires (pour vous) vous allez patauger un peu (mais c'est normal quand on débute).

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

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 29/09/2015, 22h39
  2. Réponses: 19
    Dernier message: 28/10/2005, 17h29
  3. Réponses: 5
    Dernier message: 15/07/2005, 11h25
  4. Set serial Number sur une disquette
    Par Cpet dans le forum Composants VCL
    Réponses: 4
    Dernier message: 01/12/2004, 10h24
  5. Modification du nom d'un champ dans une table
    Par reef1 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 25/06/2004, 10h55

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