Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Python] Les listes

Sujet résolu
    25 août 2009 à 15:09:09

    Bonjour à tous, je fais mes premiers pas en Python aujourd'hui :p . Mon programme qui est censé afficher le maximum d'une liste affiche juste la valeur la plus grande entre i et i+1 :
    t,i,c,val_max=[1,3,4,2],0,0,0
        while(c<4):
    	for i in t:
    		if(t[i]<t[i+1]):
    			val_max=t[i+1]
    		else:
    			val_max=t[i]
    		i+=1
    	c+=1
            print val_max
    

    Merci à vous,
    • Partager sur Facebook
    • Partager sur Twitter
      25 août 2009 à 15:42:18

      t,i,c,val_max=[1,3,4,2],0,0,0
      

      Déjà ça c'est très moche, la déclaration sur une ligne c'est bien quand tu déclare simultanément deux valeurs, surtout si ces valeurs ont un lien sémantique, 4 d'un coup c'est trop.

      Au passage i n'a pas besoin d'être déclaré à l'avance.

      while(c<4):
      	for i in t:
      		if(t[i]<t[i+1]):
      			val_max=t[i+1]
      		else:
      			val_max=t[i]
      		i+=1
      	c+=1
              print val_max
      

      Ici le while ne sert à rien, et je crois que tu n'a pas compris comment fonctionnait la boucle for en Python (c'est pas du tout comme en C).

      Ton i n'est pas l'indice de la liste, mais la valeur de chaque élément, tu n'a donc pas besoin d'utiliser t[i], puisque i est directement la valeur que tu cherche.

      Je propose cette solution :
      t = [1, 3, 6, 2, 4, 10, 9, 14, 24, 20]
      max = 0
      for v in t:
          if v > max:
              max = v
      
      print max
      

      Ça ne fonctionne que pour une liste d'entiers positifs bien entendu.

      Mais il y a encore plus simple en fait :
      t = [1, 3, 6, 2, 4, 10, 9, 14, 24, 20]
      print max(t)
      

      :-°
      • Partager sur Facebook
      • Partager sur Twitter

      Blond, bouclé, toujours le sourire aux lèvres...

      Anonyme
        25 août 2009 à 15:45:24

        >>> a=[1, 12, 8, 6, 18, 9]
        >>> max(a)
        18
        
        • Partager sur Facebook
        • Partager sur Twitter
          25 août 2009 à 15:48:46

          Citation : fred1599

          >>> a=[1, 12, 8, 6, 18, 9]
          >>> max(a)
          18

          Tu participe beaucoup mais je suis pas certain que ce genre de solution l'aide vraiment, puisqu'elles ne lui permettent pas de comprendre ses erreurs.
          • Partager sur Facebook
          • Partager sur Twitter

          Blond, bouclé, toujours le sourire aux lèvres...

          Anonyme
            25 août 2009 à 15:54:41

            Citation

            Tu participe beaucoup mais je suis pas certain que ce genre de solution l'aide vraiment, puisqu'elles ne lui permettent pas de comprendre ses erreurs.



            Le problème c'est qu'il n'a pas une erreur, mais tout faux!

            Dans un 1er cas il doit comprendre qu'il existe des fonctions toutes faites en python. Il ne peut pas les inventer.

            Quand c'est une fonction simple comme celle-ci, il n'y a pas beaucoup sujet à réfléchir. On ne va pas lui demander aussi de créer la fonction max().

            Maintenant il le sait et pourra l'utiliser dans un programme plus élaboré.

            Maintenant si il veut vraiment réécrire la fonction max(), pourquoi pas?

            :)
            • Partager sur Facebook
            • Partager sur Twitter
              25 août 2009 à 15:59:59

              Citation : fred1599

              Dans un 1er cas il doit comprendre qu'il existe des fonctions toutes faites en python. Il ne peut pas les inventer.


              Visiblement il est débutant en Python, mais aussi en programmation en général, recoder des fonctions qui existent déjà peut être un entraînement, je ne vois pas de problème à cela.

              C'est une bonne pratique de pas réinventer la roue, mais quand on apprend à programmer c'est, je pense, plus formateur de recoder la fonction max() que de l'utiliser telle quelle.
              • Partager sur Facebook
              • Partager sur Twitter

              Blond, bouclé, toujours le sourire aux lèvres...

                25 août 2009 à 16:47:48

                Une bonne solution serait la suivante, mais elle ne marche pas sur une liste vide (logique, le minimum d'une liste vide n'est pas défini) :
                li = [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1]
                current_max = li[0]
                for elem in li[1:]:
                    if elem > current_max:
                        current_max = elem
                


                Si tu veux en plus l'indice de la plus grande valeur :
                li = [1, 2, 3, 4, 5, 6, 7, 6, 5, 4, 3, 2, 1]
                current_max, current_max_i = li[0], 0
                for i, elem in enumerate(li[1:]):
                    if elem > current_max:
                        current_max = elem
                        current_max_i = i + 1 # Plus un, car on parcourt la liste décalée d'un élément
                
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  25 août 2009 à 17:21:00

                  Ou ça aussi

                  >>> a=[12, 35, 9, 56, 25]
                  >>> max=0
                  >>> i=0
                  >>> while i<len(a):
                  ...     if a[i]>=max:
                  ...         max=a[i]
                  ...     i=i+1
                  ... 
                  >>> print max
                  56
                  

                  • Partager sur Facebook
                  • Partager sur Twitter
                    25 août 2009 à 17:23:06

                    Intérêt par rapport à un for ?
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Blond, bouclé, toujours le sourire aux lèvres...

                    Anonyme
                      25 août 2009 à 17:31:11

                      Aucun, ni dans un sens ni dans l'autre d'ailleurs

                      >>>a=[12, 35, 9, 56, 25]
                      >>>max=0
                      >>> for i in a:
                      ...     if i>=max:
                      ...         max=i
                      ... 
                      >>> print max
                      56
                      
                      • Partager sur Facebook
                      • Partager sur Twitter
                        25 août 2009 à 17:47:46

                        Utilise le colorateur « type="pycon" » quand tu pastes un output de session interactive Python :) .

                        >>> a=[12, 35, 9, 56, 25]
                        >>> max=0
                        >>> for i in a:
                        ...     if i>=max:
                        ...         max=i
                        ... 
                        >>> print max
                        56
                        
                        • Partager sur Facebook
                        • Partager sur Twitter
                          25 août 2009 à 19:52:18

                          Merci à tous, oui enfaite le C m'a donné des automatismes, qu'il faut que je place entre paranthèse.
                          Faut dire qu'avec la boucle for, je l'ai pas encore vu ;o .
                          • Partager sur Facebook
                          • Partager sur Twitter
                            8 mai 2018 à 1:41:22

                            bonsoir moi aussi je suis débutant hier mon prof m'a donné un exercice similaire seulement il me demande de faire sans min ni max voici l"noncé des coups de mains welcome: écrire une fonction qui permet d’afficher le maximum et le minimum d'une d'une liste sans utiliser max et min
                            • Partager sur Facebook
                            • Partager sur Twitter
                              8 mai 2018 à 5:01:08

                              Il y a plusieurs exemples qui ont été donnés sur cette page, ils fonctionnent, tu peux les étudier / t'en inspirer.

                              • Partager sur Facebook
                              • Partager sur Twitter

                              Blond, bouclé, toujours le sourire aux lèvres...

                              [Python] Les listes

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown