Tri à bulle, bug non compris
Résolu/Fermé
loukimlou
Messages postés
4
Date d'inscription
dimanche 17 mai 2015
Statut
Membre
Dernière intervention
17 mai 2015
-
17 mai 2015 à 02:40
ellana29460 Messages postés 689 Date d'inscription lundi 7 octobre 2013 Statut Membre Dernière intervention 12 septembre 2015 - 17 mai 2015 à 13:33
ellana29460 Messages postés 689 Date d'inscription lundi 7 octobre 2013 Statut Membre Dernière intervention 12 septembre 2015 - 17 mai 2015 à 13:33
A voir également:
- Fonction tri a bulle
- Fonction si et - Guide
- Video bulle whatsapp - Accueil - Messagerie instantanée
- Tri excel - Guide
- Fonction moyenne excel - Guide
- Logiciel tri photo gratuit - Guide
2 réponses
ellana29460
Messages postés
689
Date d'inscription
lundi 7 octobre 2013
Statut
Membre
Dernière intervention
12 septembre 2015
172
17 mai 2015 à 03:50
17 mai 2015 à 03:50
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 :
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
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
loukimlou
Messages postés
4
Date d'inscription
dimanche 17 mai 2015
Statut
Membre
Dernière intervention
17 mai 2015
17 mai 2015 à 12:11
17 mai 2015 à 12:11
ellana29460
Messages postés
689
Date d'inscription
lundi 7 octobre 2013
Statut
Membre
Dernière intervention
12 septembre 2015
172
17 mai 2015 à 13:24
17 mai 2015 à 13:24
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 :
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()
loukimlou
Messages postés
4
Date d'inscription
dimanche 17 mai 2015
Statut
Membre
Dernière intervention
17 mai 2015
17 mai 2015 à 13:29
17 mai 2015 à 13:29
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 !
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 !
ellana29460
Messages postés
689
Date d'inscription
lundi 7 octobre 2013
Statut
Membre
Dernière intervention
12 septembre 2015
172
17 mai 2015 à 13:33
17 mai 2015 à 13:33
de rien, heureux d'avoir pu aider
17 mai 2015 à 11:36
Merci aussi pour les = et ==.
Cependant ça ne marche toujours pas, j'obtiens exactement la même chose que précédemment..