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 :

Indentation de return


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Par défaut Indentation de return
    Bonjour,

    j'ai à peine quelques heures de tutoriels pour débutant sur Python et je sèche sur un problème avec "return"

    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 get_voyelles(mot):
     
     
        voyelles = ['a','e','i','o','u','y']
     
    nb_voyelles = 0
     
    for i in mot:
        if i in voyelles:
            nb_voyelles += 1
            return nb_voyelles
     
     
     
    mot = input("Entrez un mot").lower()
    print(nb_voyelles," dans le mot")
     
    get_voyelles(mot)

    Je suis constamment renvoyé à "return outside fonction", je ne comprends pas pourquoi.

    Excusez les grossières autres erreurs que vous verrez. Je fais encore sans tout comprendre.

    Merci pour votre aide !

    Seb

  2. #2
    Expert confirmé

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Les indentations doivent correspondre à la logique de ton code.
    Donc, le code d'une fonction doit rester indenté à l'intérieur de cette fonction.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    def foo():
        ligne 1
        ligne 2
        ligne 3
    ligne 4
    Dans cet exemple ligne 4 ne fait pas partie de la fonction.

    Dans ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def get_voyelles(mot):
        voyelles = ['a','e','i','o','u','y']
     
    nb_voyelles = 0
    for i in mot:
        if i in voyelles:
            nb_voyelles += 1
            return nb_voyelles
    Ce qui est en caractères gras est à indenter dans la fonction. Mais le return n'est pas à sa place, il ne doit s'exécuter qu'à la fin de la boucle.

    Ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    mot = input("Entrez un mot").lower()
    print(nb_voyelles," dans le mot")
    get_voyelles(mot)
    Tu veux afficher le résultat de la fonction avant de l'appeler, pas logique.
    Tu dois aussi conserver le retour de la fonction parce que le nom nb_voyelles est inconnu en dehors de la fonction.

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Par défaut
    Merci pour ta réponse Vincent

    Je ne suis pas sûr d'avoir tout saisi. j'aurai tendance à corriger dans ce sens
    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
    def get_voyelles(mot):
     
        mot = input("Entrez un mot").lower()
        print(nb_voyelles, "dans le mot")
        voyelles = ['a','e','i','o','u','y']
     
        nb_voyelles = 0
     
    for i in mot:
        if i in voyelles:
            nb_voyelles += 1
     
     
     
    return nb_voyelles
     
    get_voyelles(mot)
    Mais J'ai toujours le même souci donc j'ai sans doute pas saisi ce que tu voulais dire.

    Ca donnerait quoi au final ?

    Merci encore

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

    Citation Envoyé par seb4stien Voir le message
    Je ne suis pas sûr d'avoir tout saisi. j'aurai tendance à corriger dans ce sens
    C'est normal! Dans un forum on ne peut pas couvrir tous les aspects d'un problème et l'illustrer avec images et exemples comme peuvent le faire les tutos.
    Jetez un œil (et passer un peu de temps pour comprendre) aux chapitres correspondants du Swinnen, il y aura plus de chances que ce soit plus clair.

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

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par seb4stien Voir le message
    Mais J'ai toujours le même souci donc j'ai sans doute pas saisi ce que tu voulais dire.
    Bonjour

    L'instruction return signifie, pour une fonction, "renvoie cette valeur à l'appelant". On dit alors (pour simplifier) que la fonction "vaut" cette valeur.
    Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def carre(n):
    	return n*n

    Si j'appelle carre(5) je récupèrerai au final "25". On peut simplifier en disant que "carre(5) vaut 25".

    Mais cette instruction return ne s'applique que si elle se trouve dans une fonction. En dehors, elle n'a aucun sens. Or Python s'appuie sur l'indentation du code pour définir quelle instruction appartient à quoi. Si on reprend le code de VinsS...
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def foo():
    	ligne 1
    	ligne 2
    	ligne 3
    ligne 4
    les 3 premières lignes appartiennent à la fonction mais pas la 4°. Personnellement j'écris d'ailleurs le nom de la fonction en commentaire pour bien marquer la fin
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def foo():
    	ligne 1
    	ligne 2
    	ligne 3
    # foo()
    ligne 4

    Si toi tu n'indentes pas ton return, Python le croit hors de la fonction. Or écrire une instruction signifiant "cette fonction retourne cette valeur" hors de la fonction ça n'a aucun sens.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre expérimenté
    Profil pro
    Loisir
    Inscrit en
    Novembre 2011
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Loisir

    Informations forums :
    Inscription : Novembre 2011
    Messages : 159
    Par défaut
    Ta boucle for et le return font partie de la fonction ? Si oui, elles doivent appartenir au bloc de la fonction.

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2014
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2014
    Messages : 3
    Par défaut
    La boucle n'était pas indentée c'est ce qui posait problème. En indentant tout dans la fonction ça fonctionne. Merci pour vos commentaires !

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

Discussions similaires

  1. return
    Par drKzs dans le forum C
    Réponses: 3
    Dernier message: 18/09/2003, 22h36
  2. [mise en page] pour bien indenter son code
    Par bihorece dans le forum C++Builder
    Réponses: 4
    Dernier message: 06/08/2003, 16h14
  3. indentation automatique
    Par Boosters dans le forum JBuilder
    Réponses: 3
    Dernier message: 17/07/2003, 16h44
  4. [Source>Format :)] indentation automatik
    Par iubito dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 10/06/2003, 16h37
  5. [indentation]Jbuilder 8
    Par partyboy dans le forum JBuilder
    Réponses: 2
    Dernier message: 26/03/2003, 13h39

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