# \[Resolu\]Petit exercice Python "simple"

**URL:** <https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355>\
**Category:** Programmation\
**Created:** [Février 20, 2016, 4:04 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355 "2016-02-20T16:04:50Z")\
**Posts on this page:** 19\
**Page:** 2

<div class="post-metadata">

**Author:** ![ymer](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/cdc98d/32.png) [@ymer](https://www.debian-fr.org/u/ymer)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/21 "2016-02-20T16:05:24Z")

</div>

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 😮😃

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

Mais merci de me consacrer du temps ![8)](https://www.debian-fr.org/uploads/default/original/1X/ae031e9834d19166598edd060b063d44f1829139.gif "Cool")

---

<div class="post-metadata">

**Author:** ![thialme](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/50afbb/32.png) [@thialme](https://www.debian-fr.org/u/thialme)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/22 "2016-02-20T16:05:25Z")

</div>

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”

---

<div class="post-metadata">

**Author:** ![ymer](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/cdc98d/32.png) [@ymer](https://www.debian-fr.org/u/ymer)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/23 "2016-02-20T16:05:26Z")

</div>

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à. 😉

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

Merci 😉

---

<div class="post-metadata">

**Author:** ![dimm](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/e9bcb4/32.png) [@dimm](https://www.debian-fr.org/u/dimm)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/24 "2016-02-20T16:05:27Z")

</div>

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]

---

<div class="post-metadata">

**Author:** ![ymer](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/cdc98d/32.png) [@ymer](https://www.debian-fr.org/u/ymer)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/25 "2016-02-20T16:05:28Z")

</div>

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

Merci dimm

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

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

---

<div class="post-metadata">

**Author:** ![dimm](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/d/e9bcb4/32.png) [@dimm](https://www.debian-fr.org/u/dimm)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/26 "2016-02-20T16:05:28Z")

</div>

Ben à l’exercice suivant 😛

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

---

<div class="post-metadata">

**Author:** ![ymer](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/cdc98d/32.png) [@ymer](https://www.debian-fr.org/u/ymer)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/27 "2016-02-20T16:05:28Z")

</div>

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

Merci 😆 Vais pouvoir vérifier mes exos précédents 😉

---

<div class="post-metadata">

**Author:** ![Yoko](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/58956e/32.png) [@Yoko](https://www.debian-fr.org/u/Yoko)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/28 "2016-02-20T16:05:28Z")

</div>

Bon maintenant je donne ma solution à moi 😆

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? 😆

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

---

<div class="post-metadata">

**Author:** ![thialme](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/50afbb/32.png) [@thialme](https://www.debian-fr.org/u/thialme)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/29 "2016-02-20T16:05:29Z")

</div>

Il faudrait penser à initialiser la variable max !

---

<div class="post-metadata">

**Author:** ![Yoko](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/58956e/32.png) [@Yoko](https://www.debian-fr.org/u/Yoko)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/30 "2016-02-20T16:05:29Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![thialme](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/50afbb/32.png) [@thialme](https://www.debian-fr.org/u/thialme)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/31 "2016-02-20T16:05:30Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![Yoko](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/58956e/32.png) [@Yoko](https://www.debian-fr.org/u/Yoko)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/32 "2016-02-20T16:05:31Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![thialme](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/50afbb/32.png) [@thialme](https://www.debian-fr.org/u/thialme)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/33 "2016-02-20T16:05:31Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Ashgenesis](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/57b2e6/32.png) [@Ashgenesis](https://www.debian-fr.org/u/Ashgenesis)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/34 "2016-02-20T16:05:40Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Yoko](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/58956e/32.png) [@Yoko](https://www.debian-fr.org/u/Yoko)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/35 "2016-02-20T16:05:51Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![thialme](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/t/50afbb/32.png) [@thialme](https://www.debian-fr.org/u/thialme)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/36 "2016-02-20T16:05:52Z")

</div>

> [@](#):
>
> @thialme : le int de unsigned int est inutile.

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!

> [@](#):
>
> Tu peut même prendre un unsigned char pour stocker ta variable du maximum.

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

```auto
#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 ?

---

<div class="post-metadata">

**Author:** ![Yoko](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/58956e/32.png) [@Yoko](https://www.debian-fr.org/u/Yoko)\
**Post date:** [Février 20, 2016, 4:05 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/37 "2016-02-20T16:05:53Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![Epsilon012](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/e/e56c9b/32.png) [@Epsilon012](https://www.debian-fr.org/u/Epsilon012)\
**Post date:** [Février 20, 2016, 4:09 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/38 "2016-02-20T16:09:20Z")

</div>

heu… moi je ferais comme ca:

```auto
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
```

---

<div class="post-metadata">

**Author:** ![Yoko](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/y/58956e/32.png) [@Yoko](https://www.debian-fr.org/u/Yoko)\
**Post date:** [Février 20, 2016, 4:09 UTC](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355/39 "2016-02-20T16:09:32Z")

</div>

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

[Page précédente](https://www.debian-fr.org/t/resolu-petit-exercice-python-simple/8355.md?page=1)
