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

Fermé
Leblanc41 - Modifié le 1 déc. 2022 à 14:32
 PierrotLeFou - 2 déc. 2022 à 17:40

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

6 réponses

mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 751
Modifié le 1 déc. 2022 à 16:06

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

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 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024 1 480 > leblanc41
1 déc. 2022 à 19:09

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

0
Leblanc41 > yg_be Messages postés 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024
1 déc. 2022 à 19:17

Je vois seulement celle de 14:42

0
yg_be Messages postés 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024 1 480 > Leblanc41
1 déc. 2022 à 19:25

Lis celle-ci également.

0

À 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 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 2 déc. 2022 à 12:00

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 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024 1 480
2 déc. 2022 à 15:03

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 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178 > yg_be Messages postés 22756 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 mai 2024
2 déc. 2022 à 16:07

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 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024 7 751 > Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024
2 déc. 2022 à 16:16

Sous réserve que la liste soit non vide !

0
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178 > mamiemando Messages postés 33093 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 4 mai 2024
Modifié le 2 déc. 2022 à 16:23

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

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 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
2 déc. 2022 à 17:30

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

Pas de problème.

0