Tri à bulle, bug non compris [Résolu/Fermé]

Signaler
Messages postés
4
Date d'inscription
dimanche 17 mai 2015
Statut
Membre
Dernière intervention
17 mai 2015
-
Messages postés
691
Date d'inscription
lundi 7 octobre 2013
Statut
Membre
Dernière intervention
12 septembre 2015
-
Bonsoir,

J'ai un programme de tri à bulle à faire en Python. Je sais qu'il y en a des tout faits sur wikipedia ou autre mais je ne les comprend pas (avec True ou False..).
Donc j'ai essayé de le faire par moi-même, mais je suis bloquée par un :
Index Error : List out of range
Je ne peux donc pas aller au bout de mon programme. J'ai essayé de chercher pourquoi ça ne va pas mais je ne comprends pas.. Merci de me dire l'erreur si vous la trouvez.
Ci-joint le screen de mon programme avec l'erreur.
Merci d'avance !

2 réponses

Messages postés
691
Date d'inscription
lundi 7 octobre 2013
Statut
Membre
Dernière intervention
12 septembre 2015
153
dans un tableau, les cases sont indexées de 0 à n-1 (pour un tableau de taille n).
la, len(liste)) te retourne n, et donc ta boucle for va tourner pour i allant de 0 à n (compris). le dernier passage va donc se faire hors du tableau, ce qui est une cause de bug.
la solution est donc la suivante :

def triabulle(liste)
  for i in range(len(liste)-1)
    for j in liste
      if liste[j+1]<liste[j]
        t=liste[j+1]
        liste[j+1]=liste[j] #attention : == -> comparaison; = -> affectation
        liste[j]=t
  print(liste)


si tu ne comprend pas mon code, relis le, et si tu ne comprend toujours pas, dis moi ce qui te pose problème dedans
Messages postés
4
Date d'inscription
dimanche 17 mai 2015
Statut
Membre
Dernière intervention
17 mai 2015

Merci, je m'étais dit que pour ma liste qui doit faire une dizaine de nombres j'allais faire tourner la boucle for 1 fois de moins, oubli de ma part.
Merci aussi pour les = et ==.
Cependant ça ne marche toujours pas, j'obtiens exactement la même chose que précédemment..
Messages postés
4
Date d'inscription
dimanche 17 mai 2015
Statut
Membre
Dernière intervention
17 mai 2015

Bon en fait en faisant plein d'essais j'ai fini par y arriver !
Merci quand même pour ton aide ellana29460 !
(Voilà ce que ça donne)
Messages postés
691
Date d'inscription
lundi 7 octobre 2013
Statut
Membre
Dernière intervention
12 septembre 2015
153
ah bah oui, forcément... j'avais cherché les erreurs ce syntaxe, et non les erreurs de logique.
j'ai retrouvé mon code fait en cours en octobre. il est un peu plus complexe mais fonctionne exactement comme le tien :

import random
tab=[]
n=int(input("taille du tableau : "))
m=int(input("borne max random : "))
for i in range(n):
    tab.append(random.randint(1, m)) # je met des nombres au hasard entre 0 et m dans le tableau
print(tab)
while n>1: # début du tri. une boucle "for" marche tout aussi bien que la boucle "while", c'est juste notre prof qui voulais qu'il utilise le "while" et jamais le "for"
    i=0
    while i<n-1:
        if tab[i]>tab[i+1]:
            tmp=tab[i]
            tab[i]=tab[i+1]
            tab[i+1]=tmp
        i+=1
    n-=1
input(tab) # affiche le tableau et attend une entrée clavier. permet une pause avant de finir le programme
exit()
Messages postés
4
Date d'inscription
dimanche 17 mai 2015
Statut
Membre
Dernière intervention
17 mai 2015

En effet beaucoup plus complexe ! ^^'
Y'a pas mal de choses que je ne comprends pas mais bon, tant que j'ai réussi à en faire un ma prof sera contente !
Encore merci à toi !
Messages postés
691
Date d'inscription
lundi 7 octobre 2013
Statut
Membre
Dernière intervention
12 septembre 2015
153
de rien, heureux d'avoir pu aider