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 des lettres d'un mot par ordre alphabétique


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 19
    Points : 10
    Points
    10
    Par défaut Tri des lettres d'un mot par ordre alphabétique
    Bonjour à tous,

    Je suis assez novice en programmation Python, je cherche à trier les lettre d'un mot par ordre alphabétique, je m'explique, par exemple j'ai le mot 'scrabble', je voudrais que les lettres soit placées de façon alphabétiques.
    J'ai déjà fais des recherches, j'ai voulu comparé les lettres à un alphabet afin de savoir leur position dans la l'alphabet et écrire ces lettres suivant leur place dans l'alphabet.
    Je préviens tout de suite, je ne veux pas utiliser les facilités python tel que 'sort'


    Merci d'avance

  2. #2
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    mot = 'scrabble'
    Alpha = 'abcdefghijklmnopqrstuvwxyz'
     
    i = 0
     
    #while i < (len(mot)):
    if mot[i] in Alpha:
        print (mot[i])
     
        i = i + 1
    je n'ai fait que cela xD

  3. #3
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    une solutions build in:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> "".join(sorted("scrabble"))
    'abbcelrs'
    si le but est de vous entraîner il faut déjà penser algorithme, trier des lettres n'est pas différent de trier des nombres, il vous suffit de trouver sur le papier comment trier par exemple [1, 5, 66, 12, 4] et vous allez voir qui vous allez pouvoir y appliquer votre chaîne de caractère très facilement

  4. #4
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Justement tu vois le 'sorted', je trouve ça beaucoup trop simple...
    Je veux vraiment faire un script complet

  5. #5
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    disons que dire "je n'ai fais que cela xD" puis "je trouve ça beaucoup trop simple..." c'est un peu contradictoire, si vous voulez progresser il faut se sortir des doigts comme on dit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> "a" < "b"
    True
    >>> 1 < 2
    True
    comme tu vois en python comparer des caractères et comparer des chiffres est strictement identique.
    Il existe des dizaines d’algorithmes de tri (et plusieurs centaine avec toutes les variantes), tu peux chercher des algorithmes sur internet puis les traduire en python, ou bien en chercher un par toi même,
    et des plus simple à mon sens est celui par insertion, on parcourt la liste n fois et à chaque fois on ajoute le plus petit, c'est pas le plus opti mais c'est le plus simple

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Ouais la comparaison avec '<' j'ai déjà vu, le tri par insertion ou fusion j'ai déjà vu aussi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mot = 'scrabble'
    longueur = len(mot)
     
    for i in range (0,longueur):
        if mot[i]<mot[i+1]:
            print('vrai')
    Ce que 'j'arrive' à faire c'est que sa sauf que j'ai une erreur que je ne comprends pas xD, en fait quand je recherche sur internet je ne trouve que des gens qui utilisent 'sorted' mais c'est trop facile d'utiliser ça ...
    Et je voudrais faire un peu plus compréhensible que le tri par insertion ... Je suis exigeant et nul c'est chaud xD

  7. #7
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Je sais que je doit prendre la longueur totale du mot en premier, ensuite je prends mon premier caractère et je le compare aux autres mais j'y arrive pas putain

  8. #8
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    J'en suis à là ... Yes on avance et encore j'ai une erreur avec la dernière ligne xD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    mot = 'scrabble'
     
    j = 0
    i = 0
    for i in range (len(mot)):
         for j in range(len(mot)+1):
             if mot[i]<mot[j]:

  9. #9
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Quand tu mets du code dans tes messages, il faut utiliser les tags de code (le "#" en haut et à droite de l'éditeur de message), sinon, c'est incompréhensible.

    Pour faire un tri simple, je te propose plutôt le "tri bulle": https://fr.wikipedia.org/wiki/Tri_%C3%A0_bulles

    En pseudo-code (voir la page de wikipedia), cela donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    tri_à_bulles(Tableau T)
       pour i allant de (taille de T)-1 à 1
           pour j allant de 0 à i-1
               si T[j+1] < T[j]
                   échanger(T[j+1], T[j])
    On traduit ça en Python:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    def tri_a_bulle(T):
        for i in range(len(T)-1, 0, -1):
            for j in range(0, i):
                if T[j+1] < T[j]:
                    t = T[j]
                    T[j] = T[j+1]
                    T[j+1] = t
    On essaie sur "scrabble":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    L = list("scrabble")
    print(L)
    tri_a_bulle(L)
    print(L)
    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ['s', 'c', 'r', 'a', 'b', 'b', 'l', 'e']
    ['a', 'b', 'b', 'c', 'e', 'l', 'r', 's']
    Pour mieux comprendre comment ça marche, on va ajouter des "print":

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    def tri_a_bulle(T):
     
        for i in range(len(T)-1, 0, -1):
     
            print()
            print("i=", i)
     
            for j in range(0, i):
     
                if T[j+1] < T[j]:
     
                    print("j=", j)
                    print("Echange:", T[j], " et", T[j+1])
     
                    t = T[j]
                    T[j] = T[j+1]
                    T[j+1] = t
     
                    print("=> Nouvelle liste:", T)
    Et on examine les affichages des "print" qu'on a ajouté au code de tri: regarde ligne par ligne comment on est arrivé à remettre toutes les lettres dans l'ordre alphabétique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    i= 7
    j= 0
    Echange: s  et c
    => Nouvelle liste: ['c', 's', 'r', 'a', 'b', 'b', 'l', 'e']
    j= 1
    Echange: s  et r
    => Nouvelle liste: ['c', 'r', 's', 'a', 'b', 'b', 'l', 'e']
    j= 2
    Echange: s  et a
    => Nouvelle liste: ['c', 'r', 'a', 's', 'b', 'b', 'l', 'e']
    j= 3
    Echange: s  et b
    => Nouvelle liste: ['c', 'r', 'a', 'b', 's', 'b', 'l', 'e']
    j= 4
    Echange: s  et b
    => Nouvelle liste: ['c', 'r', 'a', 'b', 'b', 's', 'l', 'e']
    j= 5
    Echange: s  et l
    => Nouvelle liste: ['c', 'r', 'a', 'b', 'b', 'l', 's', 'e']
    j= 6
    Echange: s  et e
    => Nouvelle liste: ['c', 'r', 'a', 'b', 'b', 'l', 'e', 's']
     
    i= 6
    j= 1
    Echange: r  et a
    => Nouvelle liste: ['c', 'a', 'r', 'b', 'b', 'l', 'e', 's']
    j= 2
    Echange: r  et b
    => Nouvelle liste: ['c', 'a', 'b', 'r', 'b', 'l', 'e', 's']
    j= 3
    Echange: r  et b
    => Nouvelle liste: ['c', 'a', 'b', 'b', 'r', 'l', 'e', 's']
    j= 4
    Echange: r  et l
    => Nouvelle liste: ['c', 'a', 'b', 'b', 'l', 'r', 'e', 's']
    j= 5
    Echange: r  et e
    => Nouvelle liste: ['c', 'a', 'b', 'b', 'l', 'e', 'r', 's']
     
    i= 5
    j= 0
    Echange: c  et a
    => Nouvelle liste: ['a', 'c', 'b', 'b', 'l', 'e', 'r', 's']
    j= 1
    Echange: c  et b
    => Nouvelle liste: ['a', 'b', 'c', 'b', 'l', 'e', 'r', 's']
    j= 2
    Echange: c  et b
    => Nouvelle liste: ['a', 'b', 'b', 'c', 'l', 'e', 'r', 's']
    j= 4
    Echange: l  et e
    => Nouvelle liste: ['a', 'b', 'b', 'c', 'e', 'l', 'r', 's']
     
    i= 4
     
    i= 3
     
    i= 2
     
    i= 1
    On voit, par exemple, que les lettres de début de l'alphabet remontent d'un indice à chaque tour de boucle (d'où le nom de "tri bulle"). C'est ce qui fait que cet algorithme est en même temps simple à comprendre, mais très lent pour des grandes listes.
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  10. #10
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Merci beaucoup de ta réponse complète déjà, j'ai quelques questions, je commence par la première :

    Je ne comprends pas trop cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in range(len(T)-1, 0, -1):
    Je vois que cela retourne la longueur du mot que tu met, en l'occurence "scrabble", mais pourquoi ne pas juste mettre len(T)-1 ? C'est peut être une question bête je ne sais pas xD

  11. #11
    Membre à l'essai
    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Février 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Technicien Help Desk
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2019
    Messages : 19
    Points : 10
    Points
    10
    Par défaut
    Je pense que commenter ton script aurait été plus simple que de mettre des "print" je suis un peu perdu dans tout sa xD

  12. #12
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 823
    Points : 7 119
    Points
    7 119
    Par défaut
    Citation Envoyé par Atou45 Voir le message
    Merci beaucoup de ta réponse complète déjà, j'ai quelques questions, je commence par la première :

    Je ne comprends pas trop cette ligne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for i in range(len(T)-1, 0, -1):
    Je vois que cela retourne la longueur du mot que tu met, en l'occurence "scrabble", mais pourquoi ne pas juste mettre len(T)-1 ? C'est peut être une question bête je ne sais pas xD
    Il faut peut-être pas pousser, il a mis l'algorithme qui permet de comprendre le code, il n'est pas là pour faire beau.
    Si l'algorithme que vous lisez n'est pas compris, c'est que vos bagages théoriques ne permettent pas.
    En aucun cas, vous pourriez espérer une réponse aussi complète ailleurs, estimez-vous heureux et faîtes l'effort de votre côté plutôt que d'attendre les efforts de ceux qui vous aide.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  13. #13
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par Atou45 Voir le message
    Je vois que cela retourne la longueur du mot que tu met, en l'occurence "scrabble", mais pourquoi ne pas juste mettre len(T)-1 ? C'est peut être une question bête je ne sais pas xD
    En fait, i n'est qu'un compteur qui limite la plage de j. Et cette ligne ne renvoie pas 7, mais à chaque tour de boucle: 7, 6, 5, ..., 1

    Tu ne peux pas avancer sans acquérir un peu les bases du langage, et je ne vais pas recopier ici la doc de Python.

    En tant qu'étudiant, tu dois apprendre à chercher un peu:
    - la doc de Python est là: https://docs.python.org/fr/3/
    - et la signification de "range" est là: https://docs.python.org/fr/3/library...pes.html#range

    Plus généralement, un bon tuto pour apprendre le langage est: https://python.developpez.com/cours/apprendre-python3/
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

Discussions similaires

  1. Tri d'une liste de mots par ordre croissant de leur taille
    Par ConanGuy dans le forum Général Python
    Réponses: 3
    Dernier message: 20/12/2015, 22h34
  2. Réponses: 5
    Dernier message: 17/09/2014, 01h04
  3. tri par ordre alphabétique des noms de fichier contenu dans un dossier
    Par ulnar dans le forum Bibliothèque standard
    Réponses: 5
    Dernier message: 07/04/2011, 16h20
  4. Classement des éléments d'une liste par ordre alphabétique
    Par Cellendhyll82 dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 15/11/2010, 10h11
  5. [] Tri d'un tableau par ordre alphabétique
    Par cafeine dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 17/09/2002, 08h43

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