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 :

mon script ne me donne aucun retour


Sujet :

Python

  1. #1
    Membre à l'essai Avatar de publiphobe
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 18
    Points
    18
    Par défaut mon script ne me donne aucun retour
    Bonjour à vous,

    j'essaie de faire un exercice sur les indices (index ?) car c'est un point sur lequel je peine à comprendre la logique au sein des boucles for.
    L'exercice consiste à créer une fonction qui a pour paramètres un élément et une liste, et qui renvoie False si l'élément n'est pas dans la liste, ou l'indice de l'élément dans le cas contraire (False comme booléen, pas comme chaîne de caractère.)

    Voici mon code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    liste=['abricot', 'voiture', 'singe', 'vache', 'trottoir', 'magasin']
     
     
    def recherche(mot, liste):                           
        for x in range(len(liste)):                
            if mot==liste[x]:                             
                return(x)                             
        return(False)  
     
    recherche('singe', liste)
    Lorsque je le lance, je n'ai aucun retour (donc aucune erreur non plus) que ce soit avec un mot présent ou non dans la liste.
    Je précise que j'ai également essayé avec
    for index, item in enumerate(liste)
    mais ça a été une catastrophe aussi, avec des erreurs à tour de bras, alors que je depuis 3 jours je lis toute la documentation sur ça.

    Du coup quelqu'un saurait me dire au moins pourquoi je n'ai aucune réponse de mon script ?

    Merci à vous.

  2. #2
    Membre actif Avatar de olivier1969
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Novembre 2013
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Novembre 2013
    Messages : 151
    Points : 208
    Points
    208
    Par défaut
    Pour moi c'est ok avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(recherche('singe', liste))

  3. #3
    Membre à l'essai Avatar de publiphobe
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par olivier1969 Voir le message
    Pour moi c'est ok avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    print(recherche('singe', liste))
    Ah, effectivement, ça fonctionne comme ça. Je vais essayer de comprendre pourquoi je dois ajouter print.

    Merci beaucoup, j'aimerais t'aider également pour ton problème de "Retour ligne de commande" mais comme tu t'en doutes, la réponse viendra d'un utilisateur plus aguerri que moi

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par publiphobe Voir le message
    Ah, effectivement, ça fonctionne comme ça. Je vais essayer de comprendre pourquoi je dois ajouter print.
    Parce que c'est l'instruction qui sert à afficher une valeur à l'écran. Et seul dans l'interpreteur Python en ligne de commandes une valeur qui n'est pas "utilisée" d'une quelconque façon est alors réaffichée immédiatement en dessous. Dans un script, une valeur qui n'est pas "utilisée" est alors perdue.

    Citation Envoyé par publiphobe Voir le message
    Je précise que j'ai également essayé avec for index, item in enumerate(liste) mais ça a été une catastrophe aussi, avec des erreurs à tour de bras, alors que je depuis 3 jours je lis toute la documentation sur ça.
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def recherche(mot, liste):                           
        for (index, item) in enumerate(liste):
            if mot == item: return index
        return None                    # False c'est 0 et alors comment différencier un 0 du False et un 0 parce que le mot est le premier trouvé ?
    # recherche()
    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]

  5. #5
    Membre à l'essai Avatar de publiphobe
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Parce que c'est l'instruction qui sert à afficher une valeur à l'écran. Et seul dans l'interpreteur Python en ligne de commandes une valeur qui n'est pas "utilisée" d'une quelconque façon est alors réaffichée immédiatement en dessous. Dans un script, une valeur qui n'est pas "utilisée" est alors perdue.
    Oui oui, je sais bien que print c'est l'instruction qui affiche une valeur à l'écran, mais comme j'avais également les instructions 'return' dans mon code, je ne pensais pas avoir besoin de 'print' pour afficher un retour. Je ne sais même pas si ce que je vous raconte a du sens. Mais je vais faire des tests de mon côté aujourd'hui.

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def recherche(mot, liste):                           
        for (index, item) in enumerate(liste):
            if mot == item: return index
        return None                    # False c'est 0 et alors comment différencier un 0 du False et un 0 parce que le mot est le premier trouvé ?
    # recherche()
    Merci beaucoup. Du coup, si j'ai bien compris, on peut remplacer 'index' et 'item' par à peu près n'importe quel mot (tant qu'il n'est pas déjà réservé au sein de python) mais le premier renverra toujours l'index (ou l'indice) et le deuxième la valeur ?

    Merci en tout cas d'avoir pris ce temps.

  6. #6
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par publiphobe Voir le message
    Oui oui, je sais bien que print c'est l'instruction qui affiche une valeur à l'écran, mais comme j'avais également les instructions 'return' dans mon code, je ne pensais pas avoir besoin de 'print' pour afficher un retour. Je ne sais même pas si ce que je vous raconte a du sens.
    Oui ça a du sens. Tu as cru que "return" renvoyait une valeur à l'écran. Sauf que tu t'es trompé, ça renvoie une valeur à l'appelant de la fonction. Et lui aura alors le choix de l'afficher ou pas.

    Citation Envoyé par publiphobe Voir le message
    Merci beaucoup. Du coup, si j'ai bien compris, on peut remplacer 'index' et 'item' par à peu près n'importe quel mot (tant qu'il n'est pas déjà réservé au sein de python)
    Exactement. Comme pour tout nom de variable. Après il y a plus ou moins une certaine forme de convention au sein des programmeurs dans les noms à employer. Par exemple j'aurais plutôt écrit for (i, item) in enumerate(...).

    Citation Envoyé par publiphobe Voir le message
    mais le premier renverra toujours l'index (ou l'indice) et le deuxième la valeur ?
    Presque. enumerate(iterable, start=0) va créer une espèce de liste à deux colonnes. La première sera une valeur incrémentale qui part de "start" et l'autre sera les éléments de l'itérable pris un à un.
    Or il se trouve que les index d'un itérable commencent à 0. C'est donc par calcul dans ma façon d'appeler enumerate() que les valeurs de la première colonne correspondent exactement aux index de l'iterable et non par le code de la fonction elle-même. J'aurais écrit enumerate(liste, -712) et les valeurs de la première colonne n'avaient plus rien à voir avec l'index.
    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]

  7. #7
    Membre à l'essai Avatar de publiphobe
    Homme Profil pro
    entrepreneur
    Inscrit en
    Septembre 2020
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : entrepreneur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Septembre 2020
    Messages : 25
    Points : 18
    Points
    18
    Par défaut
    Oui ça a du sens. Tu as cru que "return" renvoyait une valeur à l'écran. Sauf que tu t'es trompé, ça renvoie une valeur à l'appelant de la fonction. Et lui aura alors le choix de l'afficher ou pas.
    Oui, je pensais que 'return' était une sorte de 'print' dans un style plus nerd

    Presque. enumerate(iterable, start=0) va créer une espèce de liste à deux colonnes. La première sera une valeur incrémentale qui part de "start" et l'autre sera les éléments de l'itérable pris un à un.
    Or il se trouve que les index d'un itérable commencent à 0. C'est donc par calcul dans ma façon d'appeler enumerate() que les valeurs de la première colonne correspondent exactement aux index de l'iterable et non par le code de la fonction elle-même. J'aurais écrit enumerate(liste, -712) et les valeurs de la première colonne n'avaient plus rien à voir avec l'index.

    OK. Je pense avoir compris dans les grandes lignes, mais je vais essayer de déblayer cet aspect un peu plus tard ; là j'en suis encore à un niveau où j'ai une foule de notions qui sont encore floues, et pourtant bien plus simples et accessibles que cette dernière. Je fais vraiment du pas à pas, sinon je piétine.

    Merci pour tous tes éclaircissements, ta pédagogie et ta patience.

Discussions similaires

  1. Un retour sur mon script ?
    Par hizoka dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 17/08/2017, 19h02
  2. Réponses: 1
    Dernier message: 05/03/2015, 22h35
  3. Mon programme ne donne aucun retour
    Par domxaline dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 30/05/2012, 15h52
  4. Réponses: 4
    Dernier message: 28/03/2010, 19h28
  5. [LWP Socket] Ma donnée n'arrive pas sur mon script
    Par svan1812 dans le forum Modules
    Réponses: 3
    Dernier message: 11/12/2008, 06h51

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