J'apprends juste Python et je veux vérifier si une liste contient un mot. Quand je vérifie le mot, il renvoie toujours 0, même si la fonction peut le trouver et l'imprimer. Mais l'instruction if / else ...

0
Luis Michael Luethi 17 mars 2021 à 00:44

3 réponses

Meilleure réponse

Vous devriez return 0 après la fin de la boucle for et non à l'intérieur de la boucle.

def line_number(text, word):
    """
    Returns the line number (beginning with 1) where the word appears for the first time
    :param text: Text in which the word is searched for
    :param word: A word to search for
    :return: List of Line Numbers
    """
    lines = text.splitlines()
    i = 0
    for line in lines:
        i = i +1
        if word in line:
            return i
    return 0

Le problème est l'instruction else à l'intérieur de la boucle car elle interrompra la boucle lors de la première itération.

1
Sebastian Borquez Gonzalez 16 mars 2021 à 22:06

Je pense que le problème peut être que vous renvoyez 0 si le mot ne se trouve pas dans une ligne. Lorsque vous utilisez le mot-clé return, il quitte la fonction et renvoie la valeur. Donc, si un mot n'est pas dans la première ligne du texte, il renverra 0 (même si le mot est présent sur d'autres lignes)

Voici un petit exemple de ce que je pense qu'il se passe:

def is_element_within_list(element_to_search, some_list):
    for element in some_list:
        if element == element_to_search:
            return True
        else:
            return False


some_list = [1, 2, 3]
element_to_search = 2
print(is_element_within_list(element_to_search, some_list))
# output: False

Nous avons une fonction qui vérifie si un élément est dans une liste (nous pourrions utiliser le mot-clé "in", mais c'est pour le bien de l'exemple). Donc, bien que 2 soit dans some_list, la sortie de la fonction est False, car la fonction renvoie False sur l'autre si les éléments ne sont pas les mêmes

1
Jorge Alvarado 16 mars 2021 à 22:07

Je pense que le problème est que vous renvoyez 0 sur la première ligne dans laquelle le mot n'est pas. Donc, à la place, vous devriez renvoyer 0 après avoir parcouru chaque ligne:

def line_number(text, word):
    """
    Returns the line number (beginning with 1) where the word appears for the first time
    :param text: Text in which the word is searched for
    :param word: A word to search for
    :return: List of Line Numbers
    """
    lines = text.splitlines()
    i = 0
    for line in lines:
        i = i +1
        if word in line:
            return i
    return 0
1
Eichelbart 16 mars 2021 à 22:04