Indice de première occurrence.

Le problème exposé dans ce sujet a été résolu.

Est ce que cela vous parait juste? Énoncer : Écrire une fonction indice qui prend en paramètres element un nombre entier, tableau un tableau de nombres entiers, et qui renvoie l’indice de la première occurrence de element dans tableau (et -1 s’il en est absent).

def indice(element: int, tab: list) -> int:
    occurence = 0
    for i in range(len(tab)):
        if element == tab[i]
           occurence = [i]
           return occurence
        Else:
            return -1

Edit Arius: mise en forme du code

+0 -0

Salut,

Je me permets de remettre en forme ton code pour qu’il soit plus lisible :

def indice(element: int, tab: list) -> int:
    occurence = 0
    for i in range(len(tab)):
        if element == tab[i]
           occurence = [i]
           return occurence
        Else:
            return -1

Et donc non ça ne semble pas correct. Déjà il faut écrire else et non Else, mais ensuite si tu suis le flux d’exécution de ton code tu remarqueras que ta fonction renvoie -1 à la première non-occurrence, sans savoir si la valeur peut se trouver plus loin.

Aussi en Python il pourrait être intéressant d’utiliser la fonction enumerate pour itérer sur tab tout en connaissant l’index courant.

Si le else est indenté d’un niveau de moins (au niveau du for), le comportement est déjà plus celui attendu. Comme ceci :

def indice(element: int, tab: list) -> int:
    occurence = 0
    for i in range(len(tab)):
        if element == tab[i]
           occurence = [i]
           return occurence
    Else:
        return -1

C’est peut-être ce qu’avait en tête l’auteur ?

Dans tous les cas, il y d’autres soucis. A commencer par le fait que si on retourne occurence qui a été déclaré comme étant égal à [i], on retourne une liste. Or il semblerait qu’un int soit attendu.

+1 -0

Si le else est indenté d’un niveau de moins (au niveau du for), le comportement est déjà plus celui attendu.

C’est peut-être ce qu’avait en tête l’auteur ?

Vu la sémantique assez particulière de la construction for...else (le bloc else s’exécute à l’exhaustion de l’itérable traversé) et que l’OP semble débutant, j’ai un gros doute… En tout cas, c’est le genre de construction à éviter si on n’en a pas strictement besoin, ne serait-ce que parce que sa signification n’est pas triviale du tout.

Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte