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 :

Résultat None en trop suite à la recherche d'un mot dans une liste [Python 3.X]


Sujet :

Python

  1. #1
    Membre du Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Par défaut Résultat None en trop suite à la recherche d'un mot dans une liste
    Bonjour voici mon premier message !

    J'ai créé le code suivant pour chercher si un mot est dans une phrase.
    Le code fonctionne bien mais j'ai un résultat en trop : None.
    J'ai ce problème en local (python 3.9) et sur le site d'auto-formation que je suis.

    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
    text = "this is awesome text"
    word = "awesome"
     
    def search(text, word):
        list = text.split(" ")
     
        for i in range(0,len(list)):
            if word == list[i]:
                return print("Word found")
            else:
                continue
     
        return print("Word not found")
     
    print(search(text, word))

    J'obtiens le résultat:


    Je ne comprend absolument pas d'où viens le "None"..
    La liste ne comporte que des mots, pas de valeurs vides
    La boucle for fait son travail..

    Des idées ?
    Merci d'avance pour toute information qui me permettra d'avancer !

  2. #2
    Membre du Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Par défaut erreur dans l'intitulé de l'exercice - enlever le print devant l'appel de la fonction
    Ben ça commence fort!..
    Je viens de trouver la réponse,
    je pense que le problème était présent dès le départ dans la question:

    l'appel de la fonction était présenté de la manière suivante "print(search(text, word))"
    si vous enlevez le print, le none disparait...
    je pense que je ne suis pas le seul à qui cette question liée à une erreur d'énoncé (volontaire?) a posé un long temps de recherche

    "hope it will be useful"

    résolu.

  3. #3
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    Bonjour,

    Erreur d'énoncé ? pas si sûr !
    return print("n'importe quoi") n'a aucun sens puisque print() ne renvoie jamais rien.
    Que devait faire la fonction search() ? retourner ou afficher une message ?
    C'est une erreur fréquente chez les débutants de confondre print() et return.
    Peux-tu poster l'énoncé ?

    Cordialement,
    jmv

  4. #4
    Membre éclairé Avatar de BioKore
    Homme Profil pro
    Dresseur d'Alpaga
    Inscrit en
    Septembre 2016
    Messages
    300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Dresseur d'Alpaga

    Informations forums :
    Inscription : Septembre 2016
    Messages : 300
    Par défaut
    En fait, tout va dépendre de l'utilisation que tu souhaites faire de ta fonction.
    Si le but est UNIQUEMENT d'afficher la valeur à l'écran, dans ce cas là, retire les return et laisse juste print(...).
    Si tu comptes utiliser ta fonction comme étape intermédiaire pour d'autres utilisations, dans ce cas, laisse les return mais supprime les print.
    Si tu souhaites absolument faire les deux, dans ce cas, fais un print et en suite retourne la valeur

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

    Citation Envoyé par See Tenkay Voir le message
    l'appel de la fonction était présenté de la manière suivante "print(search(text, word))"
    L'énoncé dit juste que la fonction search retourne une chaine de caractère qui sera affichée par "print". Vous avez écrit une fonction qui "affiche" et retourne None.

    La différence peut paraître subtile car le résultat est le même... mais c'est tout ce qui fait la complexité des fonctions: paramètres d'appels, objets retournés...

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

  6. #6
    Membre du Club
    Homme Profil pro
    Autodidacte
    Inscrit en
    Juillet 2015
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2015
    Messages : 6
    Par défaut
    Effectivement, cela semble plus correct de faire un print d'abord et un return pour terminer.
    Merci à tous pour vos commentaires intéressants! J'en tiens déjà compte.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 838
    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 838
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par See Tenkay Voir le message
    l'appel de la fonction était présenté de la manière suivante "print(search(text, word))"
    si vous enlevez le print, le none disparait...
    je pense que je ne suis pas le seul à qui cette question liée à une erreur d'énoncé (volontaire?) a posé un long temps de recherche
    Ce n'est pas une erreur d'énoncé, c'est juste un énoncé volontairement simplifié dans le but de t'apprendre à faire des déductions.
    Si on te dit que tu dois utiliser la fonction (parce que dans print(search(...) c'est bien ce qui se passe, tu fais bel et bien une "utilisation" de la fonction ou plus précisément de ce qu'elle retourne), alors il faut que ta fonction "retourne" une valeur. Ca reste impératif. Tu débutes donc tu as tenté un return print(...) mais ce faisant tu as retourné ce que "print" retourne, c'est à dire rien (donc None par défaut) d'où le "None" que tu affiches au final.
    C'est la subtilité de l'apprentissage des fonctions. Généralement une fonction fait un travail et retourne le résultat de son travail, rien de plus. Et tout ce qu'elle peut afficher à l'écran entre temps ce n'est pas assimilable à un quelconque "retour", c'est juste un affichage.
    Exemple: def carre(n): return n*n. Cette fonction n'affiche rien, elle effectue juste son job. Si maintenant l'apelant veut afficher ce qu'elle produit, alors c'est à lui de demander explicitement cet affichage => print(2 * carre(8) + 12).
    Et quand on va plus loin, on se rend compte alors qu'en réalité, les affichages intermédiaires deviennent parfois plus une gêne qu'autre chose et donc deviennnent de moins en moins importants. Et dans les gros projets, on sépare alors bien distinctement les fonctions destinées aux travaux des fonctions destinées à afficher le résultat de ces travaux.

    Citation Envoyé par See Tenkay Voir le message
    Effectivement, cela semble plus correct de faire un print d'abord et un return pour terminer.
    Comme je viens de le dire, tu verras à l'usage que les affichages intermédiaires te seront de moins en moins utiles.
    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]

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

Discussions similaires

  1. [Python 3.X] recherche d'un mot dans une liste
    Par dedeff dans le forum Général Python
    Réponses: 3
    Dernier message: 11/02/2020, 20h30
  2. [AC-2013] requete de recherche d'un mot dans une liste
    Par obel38 dans le forum Access
    Réponses: 1
    Dernier message: 26/09/2015, 16h36
  3. recherche d'un mot dans une liste
    Par kranagard dans le forum Requêtes
    Réponses: 1
    Dernier message: 09/05/2013, 21h49
  4. Recherche d'un mot dans une phrase se touvant dans un champ
    Par Grandbastien dans le forum Access
    Réponses: 3
    Dernier message: 02/04/2006, 09h58
  5. Recherche d'un mot dans une page
    Par Emcd dans le forum Langage
    Réponses: 4
    Dernier message: 12/01/2006, 18h25

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