Trouver le minimum d'une liste sans utiliser la fonction min

Leblanc41 -  
 PierrotLeFou -

Bonjour,

Je dois résoudre l'exercice suivant :

Écrivez une fonction nommée minimum qui accepte en argument une liste de nombres et retourne sa valeur minimum. Dans le cas d'une liste vide, retournez la valeur None.

Notez bien que, dans le cadre de cet exercice, vous ne devez PAS faire appel à la fonction standard min, et que celle-ci a d'ailleurs été temporairement rendue inaccessible dans le contexte de cet exercice. Également, notez que votre fonction ne doit rien afficher.

Voici mon code

def minimum(liste):
    max = liste[0]
    longueur = len(liste)
    indice_max = 0
    for i in range(longueur):
        if liste[i] <= minimum:
            minimum = liste[i]
            indice_max = i
    return None
A voir également:

6 réponses

mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878
 

Bonjour,

Tu y es presque. Le seul soucis c'est qu'actuellement tu retournes quoi qu'il arrive None.

  • l2: cette ligne plantera si la liste est vide car liste[0] ne sera pas défini. Tu dois donc au préalable tester que la liste comporte au moins un élément (par exemple if len(liste) >0 : ...,ou de manière plus concise, avec le test if liste: ...).
    • Tu devrais renommer ta variable max en valeur_min.
    • Je te déconseille de nommer des variables min ou max car c'est le noms de deux primitives python, et même si le langage le tolère, c'est une mauvaise idée en général (car ce faisant la fonction python n'est plus visible, le symbole min ou max désigne désormais ta variable).
    • Si la liste est vide, tu peux directement retourner directement None.
  • l4: Si la liste est vide, i.e. que tu n'entres pas dans la boucle for, index_min doit valoir None. Il faut donc revoir la manière dont tu l'initialises. Vu que ligne 2, tu vas devoir tester si la liste est vide, tu peux directement retourner None dans ce test.
  • l2-l6-l7: Tu compares liste[i] à minimum. Or minimum est le nom de ta fonction, donc tu compares deux choses incomparables. Je suspecte vu comment tu as démarré ton code que tu aurais plutôt voulu faire la comparaison avec valeur_min.
  • l3-l5: tu peux supprimer la ligne 3 si tu remplaces la ligne 5 par for i in range(len(liste)):. Le code restera tout aussi lisible et ça n'affecte pas ses performances.
  • l9: si la liste est non vide ta fonction doit retourner valeur_min.

Peux-tu proposer un code corrigé qui tient compte de ces recommandations ?

Bonne chance

0
leblanc41
 

Votre code a soulevé une exception inattendue

  • notamment dans le contexte de :
    minimum([])
  • le message de l'interpréteur est :
     
    Traceback (most recent call last):
      File "solution", line 2, in minimum
    IndexError: list index out of range
    

Votre score est 50/100.

def minimum(liste):
    valeur_min = liste[0]
    indice_max = 0
    for i in range(len(liste)):
        if liste[i] <= minimum:
            minimum = liste[i]
            liste_min = i
    return valeur_min


  

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > leblanc41
 

As-tu lu la réponse donnée le 1 déc. 2022 à 14:27?

0
Leblanc41 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

Je vois seulement celle de 14:42

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584 > Leblanc41
 

Lis celle-ci également.

0
PierrotLeFou
 

À quoi te sert valeur_min?
Et quand vérifies-tu si la liste est vide?
mininum est le nom de la fonction et tu décides que c'est une variable ...

0
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 

Bonjour,

A quoi servent les variables indice_max et liste_min ?

Et valeur_min ne devrait pas être liste[0]

Il faut définir valeur_min comme un grand nombre (99999 par exemple)

ensuite, boucler sur les éléments de la liste:

si liste[i] < valeur_min : valeur_min = liste[i]

et après etre sorti de la boucle : return(valeur_min)

Ça se fait en 5 lignes de code

0
yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   1 584
 

Utiliser un des éléments de la liste comme minimum de départ est parfaitement valable.  Ceux qui préfèrent un grand nombre peuvent utiliser float('inf').

0
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168 > yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention  
 

oui, après tout ..

valeur_mini = liste[0]

pour chaque element de liste:

     si element < valeur_mini: valeur_mini = element

retourner valeur_mini

0
mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention   7 878 > Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention  
 

Sous réserve que la liste soit non vide !

0
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168 > mamiemando Messages postés 33766 Date d'inscription   Statut Modérateur Dernière intervention  
 

bien évidemment ...

je montrais juste à Leblanc41 que la mécanique est toute simple

en lisant son code d'hier à 18h18, on voit que ce n'est pas clair pour lui 

0
PierrotLeFou
 

Pourquoi ne pas donner le premier de la liste comme minimum et parcourir à partir du second au lieu de donner un grand nombre comme premier minimum?

Je suppose qu'on a déjà testé si la liste n'est pas vide.

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Phil_1857 Messages postés 1872 Date d'inscription   Statut Membre Dernière intervention   168
 

oui, c'est ce que je disais dans ma réponse de de16h07

valeur_mini = liste[0]

je ne parcoure pas à partir de liste[1], mais ça ne change pas grand-chose ...

0
PierrotLeFou
 

Pas de problème.

0