IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Tri par sélection


Sujet :

Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 165
    Points : 0
    Points
    0
    Par défaut Tri par sélection
    Bonjour,

    Je viens d'avoir un exercice pour comprendre le fonctionnement du tri sur les listes en python.

    Cependant, je n'arrive pas à traduire un algorithme très simple sur Python qui me renvoie une erreur "list index out of range"

    Code Algorithme : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Début :
         Saisir une liste L
         n ← nb d'éléments de L
         m ← L[0]
         Pour k allant de 1 à n-1 :
              Si m > L[k]
              Alors
                   m ← L[k]
              Fin du Si
         Fin du Pour
         Afficher m
    Fin.

    Si j'ai bien compris l'algorithme, il compare les nombres de la liste puis affiche le nombre le plus grand.

    Voilà le programme que je traduis en Python :

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Liste1 = input()     #je rentre : "6 5 8 2" (sans les guillemets)
    longueur = len(Liste1)
    Liste2 = Liste1.split()     #split() pour séparer les éléments
    nombre = Liste2[0]
     
    k = 1
    for k in range(longueur-1):
        if nombre > Liste2[k]:           #erreur : "list index out of range"
            nombre = Liste2[k]
     
    print(nombre)

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Le soucis est que l'action "saisir une liste L" se décompose en:
    1. saisie d'une chaîne de caractères contenant des nombres séparés par des blancs,
    2. transformation de cette chaîne en liste de chaînes de caractères,
    3. conversion des chaînes de caractères en nombre
    4. ...

    La longueur de l'objet à l'étape 1 sera celle de la chaîne de caractères saisis.
    Ce n'est qu'à l'étape 2 (mieux en 3) que vous aurez le nombre d'entiers (à trier).

    - W
    PS: comme vous avez allègrement sauté l'étape 3 vous comparez quoi dans le tri?
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Partir déjà d'une liste déjà faite.
    Est-ce le résultat que vous cherchez vraiment ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Liste1 = [6,5,8,2]     #je rentre : "6 5 8 2" (sans les guillemets)
    longueur = len(Liste1)
    nombre = Liste1[0]
     
    k = 1
    for k in range(longueur-1):
        if nombre > Liste1[k]:           #erreur : "list index out of range"
            nombre = Liste1[k]
     
    print(nombre)
    La première étape avec le "input" est en effet délicate : n'oubliez pas que le "input" donne une chaîne.
    Pas d'aide par mp.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 165
    Points : 0
    Points
    0
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    comme vous avez allègrement sauté l'étape 3 vous comparez quoi dans le tri?
    Quelle étape 3 ???


    Quant au programme de marco,

    Il m'affiche 5, alors qu'il devrait afficher 8...

  5. #5
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Salut

    Citation Envoyé par wiztricks Voir le message
    Le soucis est que l'action "saisir une liste L" se décompose en:
    1. saisie d'une chaîne de caractères contenant des nombres séparés par des blancs,
    2. transformation de cette chaîne en liste de chaînes de caractères,
    3. conversion des chaînes de caractères en nombre
    4. ...
    Citation Envoyé par pito2901
    Quelle étape 3 ???
    Ben, de façon évidente l'item numéroté 3.

    Citation Envoyé par pito2901
    Si j'ai bien compris l'algorithme, il compare les nombres de la liste puis affiche le nombre le plus grand.
    Non. Dans ton premier post, dans le deuxième bloc de code (code Python), tu changes "nombre" (ligne 8 et 9) s'il est plus grand que l'élément courant. L'algo présenté est plus une histoire de recherche de minimum.

    Citation Envoyé par pito2901
    Quant au programme de marco,

    Il m'affiche 5, alors qu'il devrait afficher 8...
    Comme dit plus haut, ça ne cherche pas le max mais le min et, en plus, ton passage "algorithme" vers Python s'est pris les pieds dans le tapis avec les indices : pour boucler sur une séquence, c'est range(longueur) et non pas range(longueur-1) qu'il faut utiliser. 5 est bien le minimum de la liste, quand on exclut le dernier élément. marco056 s'est intéressé à l'initialisation de la liste (et je suis d'accord avec lui) et a laissé passé ton erreur mais ce n'est pas le problème.

    Coder ne souffre pas (trop) l' "à peu près". Tout est (souvent) affaire de détail.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  6. #6
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 608
    Points : 2 072
    Points
    2 072
    Par défaut
    Citation Envoyé par pito2901 Voir le message
    Quelle étape 3 ???


    Quant au programme de marco,

    Il m'affiche 5, alors qu'il devrait afficher 8...

    Pour l'étape 3, c'est marqué en toutes lettres : conversion de chaînes en nombre (int ou float)

    Pour le résultat de l'autre script : pourquoi initialiser k = 1 ? Pourquoi s'arrêter à longueur - 1 ?
    Avez-vous vu la fonction "range" ?
    Pour trouver, on peut faire des "print(...)" en cours de boucle.

    [edit] grillé par plxpy
    Pas d'aide par mp.

  7. #7
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Salut,

    À quoi sert ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    >>> k = 1
    >>> for k in range(5):
    ...     print(k)
    ... 
    0
    1
    2
    3
    4
    Citation Envoyé par pito2901 Voir le message


    Quant au programme de marco,

    Il m'affiche 5, alors qu'il devrait afficher 8...
    Non, il aurait dût afficher 2 mais tu as limité la liste à n-1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    >>> l = [2, 8, 6, 9, 4]
    >>> for k in range(len(l)-1):
    ...     print(l[k])
    ... 
    2
    8
    6
    9

  8. #8
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2013
    Messages
    165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 27
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2013
    Messages : 165
    Points : 0
    Points
    0
    Par défaut
    Merci pour toutes vos réponses !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 54
    Dernier message: 09/03/2013, 15h27
  2. [À télécharger] [Tri] Tri par sélection
    Par 3DArchi dans le forum Téléchargez
    Réponses: 0
    Dernier message: 06/11/2010, 19h45
  3. Tri par sélection du minimum récursif
    Par thechieuse dans le forum Pascal
    Réponses: 2
    Dernier message: 05/11/2008, 16h03
  4. problème tri par sélection
    Par scary dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 19/05/2008, 11h40
  5. Améliorer tri par sélection
    Par katrena99 dans le forum Pascal
    Réponses: 8
    Dernier message: 05/03/2007, 15h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo