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

Discussion: variable dans une fonction [Python 3.X]

  1. #1
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2019
    Messages : 4
    Points : 3
    Points
    3

    Par défaut variable dans une fonction

    Bonjour,

    J'ai boss sur un programme pour crypter des documents, je n'arrive pas a récupérer la variable d'une fonction pour lé réutiliser dans une autre fonction.
    j'ai créé la variable test qui est lié à la fonction set_open_file () pour parcourir les fichiers et ouvrir un document, et par la suite l'utiliser pour crypter, le problème est que la fonction ce lance dés l'ouverture du programme.

    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
    46
    47
    48
    #coding:utf-8
    from tkinter import * # on importe tous tkinter permet le TK(), et evite le tkinter.Tk()
    from tkinter import filedialog # importation du sous module filedialog pour parcourir les fichiers sur pc
    from tkinter.filedialog import askopenfilename
    from tkinter.filedialog import asksaveasfilename
    import os 
    import time
    import os.path
    fenetre_principale = Tk()# ouverture de la fenetre 
    fenetre_principale.geometry("300x300")
     
     
    def set_open_file (): #creation d'une fonction pour ouvrir un document avec la fonction filedialog.askopenfile
    	result = askopenfilename(initialdir = "/", title = "choisir document", filetypes = (("text files", ".txt"), ("all files", "*,*")) )	
    	with open(result, "r") as mon_fichier : # avec l'ouverture du fichier sous (variable), tu execute ce qu'il y a en sous tab, sans avoir besoin de fermer derriere
    		result = mon_fichier.read()		
    		return result
     
    test = set_open_file() 
    button = Button(fenetre_principale, text= "ouvrir fichier", command=set_open_file)
    button.pack()
    def crypter():
     
    	tata = ""
     
    	for i in test : # boucle pour parcourir chaque lettre dans la variable
    		chiffre = ord(i) - 97 # attribution d'une valeur a chaque lettre 
    		decalage = (chiffre + 4 ) % 26
    		code = chr(decalage + 97) 
    		tata = tata + code
    	print (tata)
     
    boutton_crypter = Button (fenetre_principale, text = "crypter", command = crypter)
    boutton_crypter.pack()
     
    def set_save_file ():
     
    	sauver = asksaveasfilename(initialdir = "/", title = "enregistrer", filetypes = (("text files", ".txt"), ("all files", "*,*")))
    	with open (texte, "w") as mon_fichier : 	
                sauver = mon_fichier.write(tata)
     
    button_save = Button(fenetre_principale, text = "enregistrer", command = set_save_file)
    button_save.pack()
     
     
     
     
    fenetre_principale.mainloop() # cloture du programme


    pour faire simple j'aimerai recuperer la variable result pour l'utiliser dans la fonction crypter.
    En vous remerciant

  2. #2
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 13 721
    Points : 23 095
    Points
    23 095

    Par défaut

    Salut,

    Citation Envoyé par akromaa Voir le message
    pour faire simple j'aimerai recuperer la variable result pour l'utiliser dans la fonction crypter.
    Ce n'est possible que si cette variable est "globale".

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2019
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    et comment puis-je contourner ce problème ?

  4. #4
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 13 721
    Points : 23 095
    Points
    23 095

    Par défaut

    Citation Envoyé par akromaa Voir le message
    et comment puis-je contourner ce problème ?
    En ouvrant votre tuto. préféré au chapitre qui parle de fonctions et de portée des variables pour revoir ces notions là.
    Dans le Swinnen, c'est ici.

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

  5. #5
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2019
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    Je viens vers vous car cela fait un moment que je bloque la dessus. j'arrive à faire une fonction globale de la fonction set_open_file (), mais pas de "result"
    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
    46
    47
    48
    #coding:utf-8
    from tkinter import * # on importe tous tkinter permet le TK(), et evite le tkinter.Tk()
    from tkinter import filedialog # importation du sous module filedialog pour parcourir les fichiers sur pc
    from tkinter.filedialog import askopenfilename
    from tkinter.filedialog import asksaveasfilename
    import os 
    import time
    import os.path
    fenetre_principale = Tk()# ouverture de la fenetre 
    fenetre_principale.geometry("300x300")
     
    def set_open_file (): #creation d'une fonction pour ouvrir un document avec la fonction filedialog.askopenfile
    	result = askopenfilename(initialdir = "/", title = "choisir document", filetypes = (("text files", ".txt"), ("all files", "*,*")) )
     
    	with open(result, "r") as mon_fichier : # avec l'ouverture du fichier sous (variable), tu execute ce qu'il y a en sous tab, sans avoir besoin de fermer derriere
    		result = mon_fichier.read()	
    		print (result)	
    		return result
    button = Button(fenetre_principale, text= "ouvrir fichier", command=set_open_file)
     
    button.pack()
     
    def crypter():
     
    	tata = ""
     
    	for i in result : # boucle pour parcourir chaque lettre dans la variable
    		chiffre = ord(i) - 97 # attribution d'une valeur a chaque lettre 
    		decalage = (chiffre + 4 ) % 26
    		code = chr(decalage + 97) 
    		tata = tata + code
    	print (tata)
     
    boutton_crypter = Button (fenetre_principale, text = "crypter", command = crypter)
    boutton_crypter.pack()
     
    # ouverture de parcourir puis selection d'un docuement, le contenu est dans la variable texte
    def set_save_file ():
     
    	sauver = asksaveasfilename(initialdir = "/", title = "enregistrer", filetypes = (("text files", ".txt"), ("all files", "*,*")))
     
    	with open (texte, "w") as mon_fichier : 	
    		sauver = mon_fichier.write(tata)
     
    button_save = Button(fenetre_principale, text = "enregistrer", command = set_save_file)
    button_save.pack()
     
    fenetre_principale.mainloop() # cloture du programme

  6. #6
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 13 721
    Points : 23 095
    Points
    23 095

    Par défaut

    Salut,

    Citation Envoyé par akromaa Voir le message
    Je viens vers vous car cela fait un moment que je bloque la dessus. j'arrive à faire une fonction globale de la fonction set_open_file (), mais pas de "result"
    C'est la raison pour laquelle je vous suggéré d'ouvrir un tuto pour revoir ce qui traite de la portée des variables et qui vous indiquera comment utiliser le mot clef "global" dans ce cas.

    Et je vous ai indiqué le chapitre correspondant du Swinnen en espérant que vous ayez la curiosité d'y regarder aussi les chapitres qui concernent la programmation avec tkinter car vu l'état de votre code, vous en avez bien besoin.

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

  7. #7
    Candidat au Club
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    juin 2019
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : juin 2019
    Messages : 4
    Points : 3
    Points
    3

    Par défaut

    Merci pour le lien vers le tuto, et pour mon code il s'agit d'un bout de code sur lequel je travail. Rencontrant une difficulté durant la réalisation de celui ci je pensai trouvé ici une aide et non un jugement sur la réalisation de mon code.

    Je commence juste le développement, merci pour cet encouragement.

    Cordialement

  8. #8
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    août 2010
    Messages
    522
    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 : 522
    Points : 762
    Points
    762

    Par défaut

    Salut,

    On me corrigera si je me trompe, mais bien que la fonction retourne le contenu du fichier le bouton lui s'en bat. Je vois deux solutions:
    • Réorganiser le code pour que l'interface soit dans une classe, et définir le contenu à crypter et le contenu crypter comme un attribut
    • Faire une variable globale results modifiée par les fonctions qui ont besoin de le faire

    Cela fait 8 ans que je fais du Python, en amateur certes, et pourtant je n'ai jamais utilisé le mot clé global, même si je l'ai vu à de nombreuses reprises. Alors peut-être que je passe à côté de quelque chose, ou que ce que je fais est mal:
    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
    # Contenu a crypter
    file_content = ''
    crypted_content = ''
     
    def set_open_file():
        # Des trucs ici
        file_content = mon_fichier.read()	
     
    def crypter():
        for i in file_content:
             # Des trucs ici, notamment creer crypted_content
     
    def set_save_file():
        with open (texte, "w") as mon_fichier : 	
            sauver = mon_fichier.write(crypted_content)
    ju

  9. #9
    Modérateur

    Homme Profil pro
    Architecte technique
    Inscrit en
    juin 2008
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Industrie

    Informations forums :
    Inscription : juin 2008
    Messages : 13 721
    Points : 23 095
    Points
    23 095

    Par défaut

    Salut,

    Citation Envoyé par Julien N Voir le message
    Cela fait 8 ans que je fais du Python, en amateur certes, et pourtant je n'ai jamais utilisé le mot clé global, même si je l'ai vu à de nombreuses reprises.
    "global" est le seul moyen qu'ait une fonction pour modifier un objet non-mutable auquel il accèdera via une variable (globale).

    Les seules solutions pour s'en passer seront de n'avoir que des objets (globaux) mutables ou de passer par des classes.

    Dans ce cas, ce ne sont plus des fonctions et des variables mais des "méthodes" et des "attributs"...

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

  10. #10
    Membre éclairé
    Homme Profil pro
    Ingénieur
    Inscrit en
    août 2010
    Messages
    522
    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 : 522
    Points : 762
    Points
    762

    Par défaut

    Citation Envoyé par wiztricks Voir le message
    "global" est le seul moyen qu'ait une fonction pour modifier un objet non-mutable auquel il accèdera via une variable (globale).
    Hmm, merci. Je viens de faire un test, et effectivement une chaine de caractères définie en dehors d'une fonction ne peut être modifiée dans celle-ci. Donc mon exemple est faux. Désolé.

    Ju

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

Discussions similaires

  1. Passage de variables dans une fonction
    Par renaud26 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 01/07/2006, 17h49
  2. [Excel]Mettre une variable dans une fonction
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/04/2006, 12h00
  3. [Tableaux] Récuperer variable dans une fonction
    Par amarcil dans le forum Fonctions
    Réponses: 12
    Dernier message: 12/02/2006, 10h56
  4. Pb de variable dans une fonction :
    Par soad029 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 04/10/2005, 13h54
  5. [AS2] déclarer des variables dans une fonction
    Par ooyeah dans le forum ActionScript 1 & ActionScript 2
    Réponses: 12
    Dernier message: 02/08/2005, 12h50

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