Bonjours,
Je débute ou presque la programmation avec le livre de gerard swinnen "Apprendre a programmer avec python3".
Un exercice consiste a afficher le nombre le plus grand d'une liste. C'est ok j'y arrive mais j'ai voulu pousser un poil en retriant cette liste en ordre croissant (à partir de la ligne 15).
Et la je ne pige pas: (la ligne 33 (del(t1[k])))
La liste t1 ce vide bien au fur a mesure des boucles mais elle ne semble pas prendre en compte les retrais dans les passage suivant. Du coup ma nouvelle liste, t2, contient 8 fois le nombre 98!
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 t1=[32,5,28,98,3,54,27,46] max=0 i=0 k=0 while i<len (t1): if t1[i]>max: max=t1[i] k=i i=i+1 print ('Le plus grand nombre est',max, "et cest forcement le nombre nr",k) print ('la liste t1 au depart:',(t1)) print ('la liste t1 contient',len(t1),'occurences de 0 à',len(t1)-1) #Trie la liste en ordre croissant t2=[] maxprov=0 j=0 k=0 l=len (t1) #nombre d'ocurence t1 avant while 1 while len (t2)<l: #while1 #t1=[32,5,28,98,3,54,27,46] while j<len (t1): #while2 if t1[j]>maxprov: #si le nombre j de t1 est superieur a maxprov maxprov=t1[j] #maxprov prend la valeur du nombre j de t1 print ('le j en while 2 est',j)#et on affiche l'emplacement du nombre k=j #k prend la valeur de cette emplacement (j) j=j+1 #j est incrementé t2.append(maxprov) #On ajoute ce nombre a la liste t2 print('k est:',k,'et a comme valeur',maxprov) del(t1[k]) #on enleve cette occurence de la liste t1 k=0 j=0 #j reprend la valeur 0 pour definir le deuxieme plus grand print ('j: ',j) print ('La liste réorganisée en ordre croissant:') print (t2) print('le reste de la liste t1',t1) #________________________________________________________________________________________ # Question: #Pourquoi la liste t1, qui pourtant se vide bien avec la ligne 33 (del(t1[k])), #n'est pas pris en compte, mise a jour, dans les nouvelles while 1
C'est, j'en suis sur, une erreur de grand débutant mais j’ai beau me creuser les méninges je ne pige pas!Le plus grand nombre est 98 et cest forcement le nombre nr 3 la liste t1 au depart: [32, 5, 28, 98, 3, 54, 27, 46] la liste t1 contient 8 occurences de 0 à 7 le j en while 2 est 0 le j en while 2 est 3 k est: 3 et a comme valeur 98 k est: 0 et a comme valeur 98 k est: 0 et a comme valeur 98 k est: 0 et a comme valeur 98 k est: 0 et a comme valeur 98 k est: 0 et a comme valeur 98 k est: 0 et a comme valeur 98 k est: 0 et a comme valeur 98 j: 0 La liste réorganisée en ordre croissant: [98, 98, 98, 98, 98, 98, 98, 98] le reste de la liste t1 [] ------------------ (program exited with code: 0) Press return to continue
Merci
Partager