Tu devrais regarder de plus près comment fonctionne les structures while, for et … avant d’aller plus loin. Cela pullule sur le net. Quitte à écrire un petit programme autant prendre les bonnes habitudes tout de suite et ne pas partir dans tous les sens pour faire quelque chose qui est “simple”
Je viens de faire l’exercice, je me suis compliqué la vie…
[code]# -- coding:Utf-8 --
programme qui recherche le plus grand
élément dans une liste donnée.
li=[32, 5, 12, 8, 3, 75, 2, 15]
k=0
while len(li) > 1:
if li[k] > li[len(li) - 1]:
del(li[len(li) - 1])
else:
del(li[k])
print “le plus grand élément de cette liste a la valeur”,li[k][/code]
Il y avait beaucoup plus simple, la solution de l’auteur :
[code]#! /usr/bin/env python
-- coding: Latin-1 --
Recherche du plus grand élément d’une liste
Liste fournie au départ :
tt = [32, 5, 12, 8, 3, 75, 2, 15]
Au fur et à mesure du traitement de la liste, on mémorisera dans
la variable ci-dessous la valeur du plus grand élément déjà trouvé :
max = 0
Examen de tous les éléments :
i = 0
while i < len(tt):
if tt[i] > max:
max = tt[i] # mémorisation d’un nouveau maximum
i = i + 1
Affichage :
print “Le plus grand élément de cette liste a la valeur”, max[/code]
Moi, je pensais à la fonction max en elle même. Du coup cela aurait fait 4 lignes. Mais ce n’est pas drôle c’est du langage interprété. Moi, je m’amuse en C et je compare en assembleur les différentes approches.
[quote=“Yoko”]Ben en C t’a pas trop le choix, déjà tu dois stocker la taille du tableau.
for (unsigned i (0); i < TailleTab; ++i)
if (Max < Tab[i]) Max = Tab[i]
Tu pensais faire
for (unsigned i (0); i < TailleTab; ++i)
Max = max(Max, Tab[i])
?
Je pense pas que ce soit rentable, tu réaffecte ta variable à tout les coups et si tu fais le test tu feras ton test deux fois.[/quote]
Je voulais dire qu’en langage interprété, on ne sait pas combien de ressources cela prends. Tu peux consommer autant de ressources en écrivant une ou 3 lignes pour faire la même chose.
Le C une fois passé en assembleur permet de dire telle méthode ou telle autre méthode est plus efficace. Mais là sur un exemple de cette envergure, il n’y a aucun intérêt à compter le nombre de lignes. Cependant, je pencherais pour dire que la seconde méthode est plus gourmande en ressources que la première à cause de l’appel à la fonction max() qui ne fait rien de plus que la méthode numéro 1. Après quand tu mets unsigned i, je suppose que tu voulais dire unsigned int car je ne connais pas cette syntaxe. On pourrait aussi grignoter un peu en mettant unsigned short en supposant que la cible soit un ordinateur actuelle et pas un micro 8bits.
[quote=“dimm”]Je viens de faire l’exercice, je me suis compliqué la vie…
[code]# -- coding:Utf-8 --
programme qui recherche le plus grand
élément dans une liste donnée.
li=[32, 5, 12, 8, 3, 75, 2, 15]
k=0
while len(li) > 1:
if li[k] > li[len(li) - 1]:
del(li[len(li) - 1])
else:
del(li[k])
print “le plus grand élément de cette liste a la valeur”,li[k][/code]
Il y avait beaucoup plus simple, la solution de l’auteur :
[code]#! /usr/bin/env python
-- coding: Latin-1 --
Recherche du plus grand élément d’une liste
Liste fournie au départ :
tt = [32, 5, 12, 8, 3, 75, 2, 15]
Au fur et à mesure du traitement de la liste, on mémorisera dans
la variable ci-dessous la valeur du plus grand élément déjà trouvé :
max = 0
Examen de tous les éléments :
i = 0
while i < len(tt):
if tt[i] > max:
max = tt[i] # mémorisation d’un nouveau maximum
i = i + 1
Affichage :
print “Le plus grand élément de cette liste a la valeur”, max[/code][/quote]hi hi hi si tu regarde bien tu peux t’apercevoir que j’ai eu le même raisonnement que l’auteur mais au niveau algo seulement je ne connais pas le python
l,i=[32, 5, 12, 8, 3, 75, 2, 15] ,0
max=l[0]
while i<len(l):
if l[i]>max:
max=l[i]
i=i+1
[/quote]
Tu fais à peut près comme plus haut.
On peut remarquer que si on initialise i à 1 et max à l[1] on gagne une boucle.