[Resolu]Petit exercice Python "simple"

Oui d’accord, mais comment sortir de la boucle en fait ?

Quelle serait la ligne while ?

Car il me semble que je n’ai pas vu comment sortir de la boucle “automatiquement” après la lecture d’une chaine.

D’ailleur y’a pas si longtemps je faisais ça pour fermer les boucles:

variables © = valeurs affectées (2)
while c<6: (par exemple quoi)
… # Ce que je voulais faire

c = c+5

C’est pour dire :open_mouth: :smiley:

Je sais pas si je suis clair et compréhensif aussi car je suis un peu dans le coltar :wink:

Mais merci de me consacrer du temps 8)

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”

Ouais je crois que je vais faire ça, en essayant toutefois de pas trop m’éparpiller.

Car j’apprends avec un cours, et souvent y’a des trucs qu’on voit plus tard dans les pages d’après donc voilà. :wink:

Mais je vais relire le passage while pour m’assurer que je n’ai rien laissé de côté également

Merci :wink:

Je viens de faire l’exercice, je me suis compliqué la vie… :confused:

[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]

Ah en effet, et y’a plus de commentaires que de codes :stuck_out_tongue:

Merci dimm

Je peux considérer avoir réussi quand même ? :wink:

Tu en es où au fait dimm ? Si tu suis toujours ce cours ?

Ben à l’exercice suivant :stuck_out_tongue:

Tu ne savais pas qu’il y avait les solutions ?
=> http://python.ftp-developpez.com/cours/TutoSwinnen/fichiers/cours_python.tgz

Ah bein non je savais pas :smiley: Je savais qu’il y avait les codes sur le net, mais pas les solutions…

Merci :laughing: Vais pouvoir vérifier mes exos précédents :wink:

Bon maintenant je donne ma solution à moi :laughing:

C’est juste pour avoir une boucle bien plus compact :

for i in ch : if max < i : max = i

i prend la valeur tour à tour de chaque élément de la chaine.

3 lignes qui dis mieux? :laughing:

(oui je suis fier et alors, j’ai pas fais 450h d’info pour rien)

Il faudrait penser à initialiser la variable max !

Je parle que de la boucle aucune des deux variables ne sont initialisées et je n’ai même pas écris la première ligne.

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.

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=“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… :confused:

[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 :smiley:

@thialme : le int de unsigned int est inutile.
Tu peut même prendre un unsigned char pour stocker ta variable du maximum.

Mon dieu, c’est quoi cette notation. Je ne pourrais jamais écrire une telle abomination, il n’y a aucune portabilité, et je me ferais trucider :p!

Oui tu as raison, je ne suis pas habitué aux différents types sur les ordinateurs, j’ai l’habitude de les renommer pour la portabilité en

#define U8   unsigned char
#define S8   char

#define U16  unsigned short
#define S16  short

#define U32  unsigned int
#define S32  int
...

C’est plus facile, non ?

Je testerais la portabilité du unsigned mais je crois que c’est dans la norme.

Après moi je suis plutôt c++ que c, donc un peu moins de préprocesseur :

[code]typedef unsigned char U8
typedef char S8

typedef unsigned short U16
typedef short S16

typedef unsigned int U32
typedef int S32
…[/code]
:wink:

heu… moi je ferais comme ca:

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=“Epsilon012”]heu… moi je ferais comme ca:

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.