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 :

sous programme python [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Points : 17
    Points
    17
    Par défaut sous programme python
    Bonjour,
    J'aimerais pouvoir lancer un programme en python à partir d'un autre programme lui même en python,
    A la base, j'aurais aimé regroupé tout le "sous programme" dans une fonction, et puis l'utiliser comme tel au sein du programme principal, mais cela crée plein de problème (variable global, etc...), donc à moins que cela soit possible d’intégrer proprement un sous programme (class ? ) avec cette manière (et de récupérer une valeur, du style la fonction return). je pense que je devrais faire appel à un sous programme (qui ne prendrai pas d'argument, mais en retournerait un, égale à 0 ou 1), mais je ne comprend pas grand chose au module os.
    Merci de votre aide,

    Ti.Du.

  2. #2
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    Salut,
    Une solution basique pas trop compliquée consiste à faire un import:

    fichier a.py :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    def subProgram():
        return 1
    fichier b.py:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    from a import *
    retour = subProgram()
    print(retour)

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Et cela marche même lorsque le sous programme utilise des fonctions ? parce que si on regroupe tout le programme dans une fonction ( ta fonction subProgram() ) il y aura quand même des pbs de variable globales/locales , cela ne fait que reporté le problème ?
    J'essayerai ça samedi, en attendant, merci !

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Juillet 2008
    Messages : 10
    Points : 1
    Points
    1
    Par défaut
    C'est de la logique classique sur la portée des variables:

    a.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var="texte"
     
    def uneFonction():
        print("UneFonction")
     
    def subProgram():
        uneFonction()
        print(var)
        return 1
    b.py :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    from a import *
    var="global"
    print(var)
    retour = subProgram()
    print(var)
    print(retour)

  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 ti.du.du39 Voir le message
    Et cela marche même lorsque le sous programme utilise des fonctions ? parce que si on regroupe tout le programme dans une fonction ( ta fonction subProgram() ) il y aura quand même des pbs de variable globales/locales , cela ne fait que reporté le problème ?
    La portée d'une variable "globale" se limite au module (i.e. le script).
    En écrivant:
    a.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    variable = 123
    def subProgram():
        return variable
    b.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    from a import *
    variable = 'abc'
    retour = subProgram()
    print(retour)
    "subProgram" retournera toujours 123 car "variable = 'abc'" n'est global que dans "b.py".
    C'est une des raisons qui fait qu'"import a" est à préférer à "from a import *": çà vous oblige à préciser le module correspondant aux variables:
    b.py
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import a
    a.variable = 'abc'
    retour = a.subProgram()
    print(retour)
    et éviter plein de soucis.

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

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    sauf que cela serait plutôt sous le genre de :

    sous programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    X
    Y
    x
    y
    def a(): 
      global X,Y
      X += 1
      Y += 1
     
    a()
    programme principal :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    X
    Y
    x
    y
    def b(): 
       global X,Y
       X += 5
       Y += 3
     
    b()
    et, d’après ce que j'ai compris, si je fais votre technique, cela donne :

    programme 1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    def main():
       X
       Y
       x
       y
       def a(): 
         global X,Y
         X += 1
         Y += 1
     
       a()
       return 1
    programme 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    from programme1.py import *
    X
    Y
    x
    y
    def b(): 
       global X,Y
       X += 5
       Y += 3
     
    b()
     
    re = main()
    Cette solution me convient, mais il faut quand même que je globalise toutes les variables de la fonction main, ma question est donc, n'y a t-il pas un moyen plus "propre" d’éviter cela ?

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Bon, j'ai testé avec la solution du module que l'on importe, cela ne marche pas trop mal (il y a plein d'erreur de ce genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Warning (from warnings module):
      File "C:\Users\# PYTHON\a.py", line 30
        global Xp,Yp,fin,dep,coup,jeu,coups,S,valeur,X,Y
    SyntaxWarning: name 'coups' is assigned to before global declaration
    >>>
    (voici le ficher pour ceux et celles qui ont le courage d'y jeter un oeil ^^ : a.py )

    Cependant, il y a un autre pb : le programme ne veut pas bloquer
    Normalement, quand j'utilise la fonction, un mini jeu s'ouvre, et une fois qu'il est terminé, la fenêtre se ferme et la fonction renvoie le numéro du joueur gagnant,
    je m'attendais à ce que le programme principal (pr.py) soit "bloqué" sur la fonction tant que celle ci n'aurait pas fini de s’exécuter, et, une fois que celle ci est terminé (qu'il y a un gagnant, que la fenetre se ferme, et que la fonction retourne la valeur demandé) récupérer la valeur du gagnant, et continuer sur le programme principal.
    Sauf que la, cela ne bloque pas du tout, j'ai l'impression que cela lance un 2eme programme, car, on peut tjs se déplacer (on n'est pas bloqué dans le programme principal) et je ne reçois la valeur qu'une fois que les 2 fenêtres sont fermées, j'ai bien essayer de bloqué le curseur avec un while tant que la valeur est égale à 0 (=qu'il n'y a aucun gagnant) mais cela ne marche pas non plus..
    Encore merci de vos aides

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Allier (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Points : 17
    Points
    17
    Par défaut
    Pour ceux qui s’intéressent à la résolution du sujet (en partie vers la fin de la conversation, la réponse est ici ) Merci de votre aide !

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

Discussions similaires

  1. Problème programme Python 3 sous Tkinter
    Par vbvero dans le forum Tkinter
    Réponses: 2
    Dernier message: 05/02/2017, 17h35
  2. Réponses: 0
    Dernier message: 10/07/2015, 03h06
  3. executer mon programme python sous lunix
    Par nancy maman dans le forum Général Python
    Réponses: 17
    Dernier message: 06/10/2011, 21h43
  4. [Lien]erreur dans mon programme python
    Par durnambule dans le forum Général Python
    Réponses: 11
    Dernier message: 29/01/2004, 14h59
  5. [langage] les sous programmes
    Par giverny dans le forum Langage
    Réponses: 6
    Dernier message: 21/07/2003, 19h24

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