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 :

Comment utiliser une fonction qui appelle une autre fonction sous Python?


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut Comment utiliser une fonction qui appelle une autre fonction sous Python?
    Bonjour,

    je suis nouveau sur le forum, et j'aimerais sollicité votre aide.

    Mon problème est le suivant :
    J'aimerais utiliser une fonction qui fais appel à d'autre fonction.

    Je vous présente mon code sans appel de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    def images(liste):
        newliste = []
        for element in liste :
            if element % 2 == 0:
                newliste.append(element)
        return print (newliste)
     
    liste = [0,1,2,3]
     
    images(liste)
    Et l'autre avec une tentative d'appel de fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def images(liste):
        newliste = []
        for element in liste :
            if element % 2 == 0:
                newliste.append(element)
        return print (newliste)
     
    def mult(x):
    return x % 2 == 0
     
    liste = [0,1,2,3]
     
    mult(x)
    images(liste)
    J'avais pensé à remplacer cette ligne "element % 2", en appelant la fonction pour qu'elle exécute à sa place, est-ce possible ou un fantasme ? Merci de votre d'aide...
    Cordialement, Younes.

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

    Citation Envoyé par Younnesblack Voir le message
    J'avais pensé à remplacer cette ligne "element % 2", en appelant la fonction pour qu'elle exécute à sa place, est-ce possible ou un fantasme ? Merci de votre d'aide...
    C'est possible... et on vous explique comment faire cela dans n'importe quel tuto..
    note: pas facile d'apprendre à programmer sans un bon tuto.

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

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    C'est possible... et on vous explique comment faire cela dans n'importe quel tuto..
    note: pas facile d'apprendre à programmer sans un bon tuto.

    - W
    Bonsoir,
    je vous remercie de votre réponse, j'ai lut entièrement le cours que vous m'avez donné, mais honnêtement cela ne m'a pas vraiment aidé..

    J'ai malgré pondu cela...
    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 mult(x):
        return x % 2 == 0
     
     
    def images(liste):
        newliste = []
        for element in liste :
            a = mult(x)
            if x :
                newliste.append(element)
        return print (newliste)
     
    liste = [0,1,2,3]
     
     
    images(liste)
    J'ai compris le principe d'appeler une fonction mais la... j'ai 6 exercices du même type mais je suis vraiment bloquer, un indice ou une piste s'il vous plait....

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 676
    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 676
    Par défaut
    Citation Envoyé par Younnesblack Voir le message
    je vous remercie de votre réponse, j'ai lut entièrement le cours que vous m'avez donné, mais honnêtement cela ne m'a pas vraiment aidé..
    Un tuto. c'est pas que de la lecture. C'est aussi des exercices pour vérifier que vous avez bien compris ce que çà raconte. Ce qui passe par un temps plus ou moins long à passer à pianoter des instructions à la console pour voir comment Python réagit et comprendre ce qu'il en fait.
    Et triturer son cerveau pour fabriquer des liaisons entre neurones (qui traduiront ce "comprendre") est un processus chimique: c'est lent. Si vous n'êtes pas patient, c'est même pas la peine d'essayer.

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

  5. #5
    Membre chevronné
    Avatar de BlackoOSX
    Homme Profil pro
    Étudiant à l'INSA HdF
    Inscrit en
    Septembre 2014
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant à l'INSA HdF
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 360
    Billets dans le blog
    3
    Par défaut
    Salut!
    Il y a trois erreurs dans ton code...

    Déjà dans ta première fonction que tu appelles (images) quand tu retourne ton information tu ne peut pas l'afficher à l'écran directement...

    Le mieux est de faire comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def TaFonction (TonArgument):
        #Tes calculs sur ton argument
        return LeResultatDeTonCalcul
     
    LeResultatDeTonCalcul = TaFonction(TonArgument)
    print(LeResultatDeTonCalcul)
    Ensuite quand tu appelles ta fonction "mult" tu lui passe un argument "x". Sauf que ton argument "x" n'est jamais définis dans ton code auparavant. D'après ce que j'ai compris de ton code, tu essaie de voir si un nombre qui est dans "liste" appartient à la table de 2. A ce moment là il faut que tu passe à "mult" ta variable "element" que tu définie dans ta boucle for. Il y a une façon assez simple pour expliquer ça, essaie de la lire avant que je te donne la solution dans ton code pour que tu puisse bien tout comprendre et que tu ne refasse plus cette erreur:

    En mathématiques quand tu as une fonction f qui est du type ax+b:
    Quand tu cherche f(x) tu passe à cette fonction ton argument x qui est définis plus haut dans ton exercice en général (Soit x = 4 par exemple) et tu vas calculer la valeur de f à partir de x.

    En informatique c'est la même chose sauf que ce n'est pas la même syntaxe... Tu définis x, tu le passe à ta fonction, elle te retourne les arguments et c'est finis... La seule différence en informatique c'est que quand tu passe un argument à ta fonction il n'est pas obligé d'avoir le même nom dans ton code principal et dans ta fonction, je m'explique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def MaFonction(Arg1, Arg2):    #Dans ta fonction A = Arg1 et B = Arg2
        #Blabla
        return MaValeur
     
    A = 0
    B = 1
    MaValeurDuCodePrincipal = MaFonction(A, B)
    Et c'est exactement cette erreur que tu fait avec "element"...

    Voilà j'espère que cela t'aura éclaircit, maintenant voici ton code modifié:
    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
    def mult(x):
        return x % 2 == 0
     
    def images(liste):
        newliste = []
        for element in liste :
            a = mult(element)
            if x :
                newliste.append(element)
        return newliste
     
    liste = [0,1,2,3]
     
     
    newliste = images(liste)
     
     
    print(newliste)
    Ta troisième et dernière erreur est une erreur toute bête... Quand tu teste si ton "x" vaut "True" ou "False" dans ta condition, tu ne teste pas la bonne variable... En effet tu fait presque la même erreur que tout à l'heure: Quand tu passe ton argument dans ton code principal c'est la variable "element", quand tu arrive dans ta fonction "mult" c'est ta variable "x" mais quand tu reviens dans ta fonction "images" c'est la variable "a" qui reçoit l'information donc ce n'est pas "x" mais "a" qu'il faut tester...

    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
    def mult(x):    return x % 2 == 0
     
     
    def images(liste):
        newliste = []
        for element in liste :
            a = mult(element)
            if a :
                newliste.append(element)
        return newliste
     
    liste = [0,1,2,3]
     
     
    newliste = images(liste)
     
     
    print(newliste)
    Voilà, bon on vas pas ce mentir, avec toutes tes variable ça ne fait pas un code tout à fait bien lisible, je te propose celui que j'ai fait avec un petit peu d'interface utilisateur via le terminal pour le confort d'utilisation:
    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
    # -*- coding: utf-8 -*-
    #!/usr/bin/env python
    #Creer par HERMAN ADRIEN
     
    def mult(nb):
        return nb % 2 == 0
     
    boucle = True    #Pour repeter le programme
     
    while boucle == True:
        print("")    #Pour l'esthetique
        nb = raw_input("Quel nombre voulez-vous tester: ")    #On demande a l'utilateur en recuperant l'info
        print("")
     
        is_int = nb.isdigit()    #On verifie que c'est un nombre
     
        if is_int == True:    #Si c'est un nombre alors...
            nb = int(nb)    #Parce que avec "raw_input" c'est une chaine de caracteres
            table2 = mult(nb)    #Ca c'est ton code
     
            if table2:
                print("")
                print("{0} est dans la table de 2!".format(nb))
                print("")
            else:
                print("")
                print("{0} n'est pas dans la table de 2!".format(nb))
                print("")
     
        rep = raw_input("Voulez-vous recommencer? (O/N): ")    #Pour refaire une boucle ou non
        if rep == "N":
            boucle = False
    Voilà j'espère t'avoir aider, surtout n'hésite pas si tu as un soucis!

  6. #6
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2017
    Messages : 3
    Par défaut Merci !
    Citation Envoyé par wiztricks Voir le message
    Un tuto. c'est pas que de la lecture. C'est aussi des exercices pour vérifier que vous avez bien compris ce que çà raconte. Ce qui passe par un temps plus ou moins long à passer à pianoter des instructions à la console pour voir comment Python réagit et comprendre ce qu'il en fait.
    Et triturer son cerveau pour fabriquer des liaisons entre neurones (qui traduiront ce "comprendre") est un processus chimique: c'est lent. Si vous n'êtes pas patient, c'est même pas la peine d'essayer.

    - W
    Oui, merci du rappel.


    Merci beaucoup BlackoOSX;,en dehors de ta réponse, j'ai réussi à trouver en essayant et en m'acharnant.

    Mais ce que tu m'a montré, c'est vraiment ouf ! Je suis en seconde d'année de programmation Python, et on n'a jamais vu ça...

    En tout cas, merci beaucoup de ton temps !!


    Cordialement, Younes.

  7. #7
    Membre chevronné
    Avatar de BlackoOSX
    Homme Profil pro
    Étudiant à l'INSA HdF
    Inscrit en
    Septembre 2014
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant à l'INSA HdF
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 360
    Billets dans le blog
    3
    Par défaut
    C'est un plaisir!

  8. #8
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 030
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 030
    Par défaut
    Citation Envoyé par Younnesblack Voir le message
    Je suis en seconde d'année de programmation Python, et on n'a jamais vu ça...
    Tu pourrais même avoir fait 5 années de programmation python, si tu ne pratiques pas avec un tutoriel et ton interpréteur python, jamais tu enregistreras ce que les lignes du tutoriels racontent.

    Ce que propose @BlackoOSX est chose très courante dans le monde de la programmation, pas seulement en python. Il faut lire des bouquins ou des tutoriels pour s'en rendre compte.

    @BlackoOSX,

    Je sais que c'est un débutant, mais tu aurais pu simplifier beaucoup plus, économiser plus de lignes, sans le rendre plus complexe pour autant.
    Maintenant le principe du PO est là, et le but est de montrer que l'on peut exécuter une fonction dans une autre fonction, mais je le trouve bien caché parmi toutes ces lignes.

    Au passage,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    while boucle:
        # suite du code
    est bien plus pythonique pour démarrer ta boucle infinie... (Qu'est-ce qui te fait dire qu'il fait du python 2.x et pas du python 3.x ?)

    @Younnesblack,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    def mult(x):
        return x % 2 == 0
     
     
    def images(liste):
        newliste = []
        for element in liste :
            a = mult(x)
            if x :
                newliste.append(element)
        return print (newliste)
     
    liste = [0,1,2,3]
    (déjà dit par @blackoOSX) - Ce code est presque correct, c'est une question de logique. Ta variable a est le résultat de ton test, c'est cette variable à placé après ton if, pas x !
    Ensuite c'est une erreur de syntaxe sur ta dernière ligne, return print n'existe pas, il faut virer le print dans ton cas.
    Au passage on préférera le test
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if mult(x):
        # suite du code
    On pourrait faire plus simple en particulier sur ce code, mais on va en rester là, trop de questions se rajouteraient, et je pense que tu t'en poses déjà suffisamment.

  9. #9
    Membre chevronné
    Avatar de BlackoOSX
    Homme Profil pro
    Étudiant à l'INSA HdF
    Inscrit en
    Septembre 2014
    Messages
    360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant à l'INSA HdF
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2014
    Messages : 360
    Billets dans le blog
    3
    Par défaut
    (Qu'est-ce qui te fait dire qu'il fait du python 2.x et pas du python 3.x ?)
    C'est vrai que développant sous Python2 je ne fais pas attention à donner une syntaxe qui pour ce faire sur les deux versions....

Discussions similaires

  1. Réponses: 32
    Dernier message: 18/05/2017, 15h41
  2. Réponses: 1
    Dernier message: 21/05/2014, 07h51
  3. Créer une invite qui appelle une autre invite
    Par Noura59 dans le forum Deski
    Réponses: 2
    Dernier message: 17/08/2012, 10h47
  4. [XL-2003] exécution d'une macro qui appel un autre classeur sans raisons
    Par fllyann dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/03/2011, 10h38
  5. Réponses: 2
    Dernier message: 19/10/2006, 15h29

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