Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Débutant] Exercice d'après Swinnen avec une liste : rien ne va plus si un peu corsé

21 réponses
Avatar
chose
Bonjour,

Je débute avec le livre de M. Swinnen, je suis arrivé à l'exercice sur
les listes (PDF, page 54) :

#Exercice 5.13 : Écrivez un programme qui recherche le plus grand
#élément présent dans une liste donnée. Par exemple, si on l'appliquait
#à la liste [32, 5, 12, 8, 3, 75, 2, 15], ce programme devrait afficher
#: le plus grand élément de cette liste a la valeur 75.

Je l'ai réussi avec [32, 5, 12, 8, 3, 75, 2, 15].
Mais quand j'utilise raw_input pour des listes sur mesure,
rien ne va plus.
J'ai testé deux variantes qui donnent toutes les deux un résultat
erroné. Je suis curieux de connaître la raison de cette erreur.
Le code est simple pour les habitué(e)s, un coup d'oeil de votre part
me ferait plaisir et m'aidera certainement. Merci.
a+
Chose

------------------------------------------------------ programme 1

#-*- coding:latin-1 -*-
a=[]
print "Nombre d'items dans la liste ?"
b=int(raw_input())
print "Va pour", b, "items"
i = 0
while i < b:
a.append(raw_input())
i = i + 1
d=len(a)
i =0
c=0
print a
while i < d:
if int(a[i]) > c:
c = a[i]
print c
i = i+1
print "Le plus grand élément de la liste a la valeur de", c

------------------------------------------------------ résultat de 1

Voici le résultat :

Nombre d'items dans la liste ?
7
Va pour 7 items
14
5
16
3
25
4
60
['14', '5', '16', '3', '25', '4', '60']
14
Le plus grand élément de la liste a la valeur de 14

------------------------------------------------------ programme 2

#-*- coding:Latin-1 -*-
a=[]
print "Nombre d'items dans la liste ?"
b=int(raw_input())
print "Va pour", b, "items"
i = 0
while i < b:
a.append(raw_input())
i = i + 1
d=len(a)
i =0
c=0
print a
while i < d:
if a[i] > c: #j'ai changé ici
c = a[i]
print c
i = i+1
print "Le plus grand élément de la liste a la valeur de", c

------------------------------------------------------ résultat de 2

Nombre d'items dans la liste ?
7
Va pour 7 items
14
5
16
3
25
4
60
['14', '5', '16', '3', '25', '4', '60']
14
5
60
Le plus grand élément de la liste a la valeur de 60

10 réponses

1 2 3
Avatar
William Dode
On 11-12-2006, chose wrote:
Bonjour,

Je débute avec le livre de M. Swinnen, je suis arrivé à l'exercice sur
les listes (PDF, page 54) :

#Exercice 5.13 : Écrivez un programme qui recherche le plus grand
#élément présent dans une liste donnée. Par exemple, si on l'appliquait
#à la liste [32, 5, 12, 8, 3, 75, 2, 15], ce programme devrait afficher
#: le plus grand élément de cette liste a la valeur 75.

Je l'ai réussi avec [32, 5, 12, 8, 3, 75, 2, 15].
Mais quand j'utilise raw_input pour des listes sur mesure,
rien ne va plus.
J'ai testé deux variantes qui donnent toutes les deux un résultat
erroné. Je suis curieux de connaître la raison de cette erreur.
Le code est simple pour les habitué(e)s, un coup d'oeil de votre part
me ferait plaisir et m'aidera certainement. Merci.
a+
Chose

------------------------------------------------------ programme 1

#-*- coding:latin-1 -*-
a=[]
print "Nombre d'items dans la liste ?"
b=int(raw_input())
print "Va pour", b, "items"
i = 0
while i < b:
a.append(raw_input())
i = i + 1
d=len(a)
i =0
c=0
print a
while i < d:
if int(a[i]) > c:
c = a[i]


ici, c = a[i] hors a[i] est une chaine, donc le coup d'après la
comparaison se fait entre int(a[i]), un entier, et c une chaine

print c
i = i+1
print "Le plus grand élément de la liste a la valeur de", c

------------------------------------------------------ résultat de 1

Voici le résultat :

Nombre d'items dans la liste ?
7
Va pour 7 items
14
5
16
3
25
4
60
['14', '5', '16', '3', '25', '4', '60']
14
Le plus grand élément de la liste a la valeur de 14

------------------------------------------------------ programme 2

#-*- coding:Latin-1 -*-
a=[]
print "Nombre d'items dans la liste ?"
b=int(raw_input())
print "Va pour", b, "items"
i = 0
while i < b:
a.append(raw_input())
i = i + 1
d=len(a)
i =0
c=0
print a
while i < d:
if a[i] > c: #j'ai changé ici
c = a[i]
print c
i = i+1
print "Le plus grand élément de la liste a la valeur de", c

------------------------------------------------------ résultat de 2

Nombre d'items dans la liste ?
7
Va pour 7 items
14
5
16
3
25
4
60
['14', '5', '16', '3', '25', '4', '60']
14
5
60
Le plus grand élément de la liste a la valeur de 60





--
William Dodé - http://flibuste.net
Développeur informatique indépendant

Avatar
chose
William Dode avait énoncé :
On 11-12-2006, chose wrote:
Bonjour,

Je débute avec le livre de M. Swinnen, je suis arrivé à l'exercice sur
les listes (PDF, page 54) :

#Exercice 5.13 : Écrivez un programme qui recherche le plus grand
#élément présent dans une liste donnée. Par exemple, si on l'appliquait
#à la liste [32, 5, 12, 8, 3, 75, 2, 15], ce programme devrait afficher
#: le plus grand élément de cette liste a la valeur 75.

Je l'ai réussi avec [32, 5, 12, 8, 3, 75, 2, 15].
Mais quand j'utilise raw_input pour des listes sur mesure,
rien ne va plus.
J'ai testé deux variantes qui donnent toutes les deux un résultat
erroné. Je suis curieux de connaître la raison de cette erreur.
Le code est simple pour les habitué(e)s, un coup d'oeil de votre part
me ferait plaisir et m'aidera certainement. Merci.
a+
Chose

------------------------------------------------------ programme 1

#-*- coding:latin-1 -*-
a=[]
print "Nombre d'items dans la liste ?"
b=int(raw_input())
print "Va pour", b, "items"
i = 0
while i < b:
a.append(raw_input())
i = i + 1
d=len(a)
i =0
c=0
print a
while i < d:
if int(a[i]) > c:
c = a[i]


ici, c = a[i] hors a[i] est une chaine, donc le coup d'après la
comparaison se fait entre int(a[i]), un entier, et c une chaine

J'ai compris ! Je suis content.

Je continue mes exercices... a+

print c
i = i+1
print "Le plus grand élément de la liste a la valeur de", c

------------------------------------------------------ résultat de 1

Voici le résultat :

Nombre d'items dans la liste ?
7
Va pour 7 items
14
5
16
3
25
4
60
['14', '5', '16', '3', '25', '4', '60']
14
Le plus grand élément de la liste a la valeur de 14

------------------------------------------------------ programme 2

#-*- coding:Latin-1 -*-
a=[]
print "Nombre d'items dans la liste ?"
b=int(raw_input())
print "Va pour", b, "items"
i = 0
while i < b:
a.append(raw_input())
i = i + 1
d=len(a)
i =0
c=0
print a
while i < d:
if a[i] > c: #j'ai changé ici
c = a[i]
print c
i = i+1
print "Le plus grand élément de la liste a la valeur de", c

------------------------------------------------------ résultat de 2

Nombre d'items dans la liste ?
7
Va pour 7 items
14
5
16
3
25
4
60
['14', '5', '16', '3', '25', '4', '60']
14
5
60
Le plus grand élément de la liste a la valeur de 60




Avatar
chose
chose avait soumis l'idée :
William Dode avait énoncé :
On 11-12-2006, chose wrote:
Bonjour,

Je débute avec le livre de M. Swinnen, je suis arrivé à l'exercice sur les
listes (PDF, page 54) :

#Exercice 5.13 : Écrivez un programme qui recherche le plus grand #élément
présent dans une liste donnée. Par exemple, si on l'appliquait #à la liste
[32, 5, 12, 8, 3, 75, 2, 15], ce programme devrait afficher #: le plus
grand élément de cette liste a la valeur 75.

Je l'ai réussi avec [32, 5, 12, 8, 3, 75, 2, 15].
Mais quand j'utilise raw_input pour des listes sur mesure,
rien ne va plus.
J'ai testé deux variantes qui donnent toutes les deux un résultat erroné.
Je suis curieux de connaître la raison de cette erreur.
Le code est simple pour les habitué(e)s, un coup d'oeil de votre part me
ferait plaisir et m'aidera certainement. Merci.
a+
Chose

------------------------------------------------------ programme 1

#-*- coding:latin-1 -*-
a=[]
print "Nombre d'items dans la liste ?"
b=int(raw_input())
print "Va pour", b, "items"
i = 0
while i < b:
a.append(raw_input())
i = i + 1
d=len(a)
i =0
c=0
print a
while i < d:
if int(a[i]) > c:
c = a[i]


ici, c = a[i] hors a[i] est une chaine, donc le coup d'après la comparaison
se fait entre int(a[i]), un entier, et c une chaine

J'ai compris ! Je suis content.

Je continue mes exercices... a+

J'étais tellement exalté que j'ai oublié de dire merci.

Grand merci.
La réponse est :
if int(a[i]) > c:
c = int(a[i])

print c
i = i+1
print "Le plus grand élément de la liste a la valeur de", c

------------------------------------------------------ résultat de 1

Voici le résultat :

Nombre d'items dans la liste ?
7
Va pour 7 items
14
5
16
3
25
4
60
['14', '5', '16', '3', '25', '4', '60']
14
Le plus grand élément de la liste a la valeur de 14

------------------------------------------------------ programme 2

#-*- coding:Latin-1 -*-
a=[]
print "Nombre d'items dans la liste ?"
b=int(raw_input())
print "Va pour", b, "items"
i = 0
while i < b:
a.append(raw_input())
i = i + 1
d=len(a)
i =0
c=0
print a
while i < d:
if a[i] > c: #j'ai changé ici
c = a[i]
print c
i = i+1
print "Le plus grand élément de la liste a la valeur de", c

------------------------------------------------------ résultat de 2

Nombre d'items dans la liste ?
7
Va pour 7 items
14
5
16
3
25
4
60
['14', '5', '16', '3', '25', '4', '60']
14
5
60
Le plus grand élément de la liste a la valeur de 60






Avatar
Jonathan Barnoud
chose avait soumis l'idée :
William Dode avait énoncé :
On 11-12-2006, chose wrote:
Bonjour,

Je débute avec le livre de M. Swinnen, je suis arrivé à l'exercice
sur les listes (PDF, page 54) :

#Exercice 5.13 : Écrivez un programme qui recherche le plus grand
#élément présent dans une liste donnée. Par exemple, si on
l'appliquait #à la liste [32, 5, 12, 8, 3, 75, 2, 15], ce programme
devrait afficher #: le plus grand élément de cette liste a la valeur
75.

Je l'ai réussi avec [32, 5, 12, 8, 3, 75, 2, 15].
Mais quand j'utilise raw_input pour des listes sur mesure,
rien ne va plus.
J'ai testé deux variantes qui donnent toutes les deux un résultat
erroné. Je suis curieux de connaître la raison de cette erreur.
Le code est simple pour les habitué(e)s, un coup d'oeil de votre
part me ferait plaisir et m'aidera certainement. Merci.
a+
Chose

------------------------------------------------------ programme 1

#-*- coding:latin-1 -*-
a=[]
print "Nombre d'items dans la liste ?"
b=int(raw_input())
print "Va pour", b, "items"
i = 0
while i < b:
a.append(raw_input())
i = i + 1
d=len(a)
i =0
c=0
print a
while i < d:
if int(a[i]) > c:
c = a[i]


ici, c = a[i] hors a[i] est une chaine, donc le coup d'après la
comparaison se fait entre int(a[i]), un entier, et c une chaine

J'ai compris ! Je suis content.

Je continue mes exercices... a+

J'étais tellement exalté que j'ai oublié de dire merci.

Grand merci.
La réponse est :
if int(a[i]) > c:
c = int(a[i])



Tu peux aussi faire la conversion au moment de stocker la valeur :
while i < b :
a.append(int(raw_input())
i = i+1

Jonathan Barnoud




Avatar
NicolasP
d=len(a)
i =0
c=0
print a
while i < d:
if int(a[i]) > c:
c = a[i]
print c
i = i+1






Pour parcourir une liste tu peux aussi faire :

for element in liste :
faire qqchose

cequi donne pour ton exercice :

c = 0
for i in a :
if int(i) > c :
c = int(i)


que je préfère écrire :

c = 0
for i in a :
if c < int(i) : # le code est plus clair à mon avis
c = int(i)


voire même :

c = 0
for i in a :
i = int(i) # la conversion n'est faite qu'une fois
if c < i :
c = i

Mais convertir les éléments de la liste lors de la saisie est encore mieux. De cette façon, quand tu lis le code, tu sais tout de suite que ce sont des entiers qui doivent être saisis.
La lisibilité d'un code est aussi importante que son bon fonctionnement. Alors, autant partir sur de bonnes bases.

Pour finir, que se passe t-il si tu ne saisis que des nombres négatifs ?

Nicolas




Avatar
William Dode
On 12-12-2006, NicolasP wrote:

...

Mais convertir les éléments de la liste lors de la saisie est encore
mieux. De cette façon, quand tu lis le code, tu sais tout de suite que
ce sont des entiers qui doivent être saisis.


et du coup c = max(a)

--
William Dodé - http://flibuste.net
Développeur informatique indépendant

Avatar
Boris Borcic
William Dode wrote:

et du coup c = max(a)



Donc en somme on peut tout comprimer en

print max(int(x) for x in iter(raw_input,''))

Avatar
chose
Tu peux aussi faire la conversion au moment de stocker la valeur :
while i < b :
a.append(int(raw_input())
i = i+1

Jonathan Barnoud


Merci, c'est noté.

NicolasP a écrit:
c = 0
for i in a :
i = int(i) # la conversion n'est faite qu'une fois
if c < i :
c = i

Mais convertir les éléments de la liste lors de la saisie est encore mieux.
De cette façon, quand tu lis le code, tu sais tout de suite que ce sont des
entiers qui doivent être saisis.
La lisibilité d'un code est aussi importante que son bon fonctionnement.
Alors, autant partir sur de bonnes bases.

Pour finir, que se passe t-il si tu ne saisis que des nombres négatifs ?

Nicolas


Pour les nombres négatifs, j'ai essayé, cela ne marche pas, il me dit
que c'est zéro la valeur maximale. Pourtant avec une condition comme :
if i < -5:
i=int(i)
c=i
print c
la boucle trie correctement les valeurs négatives.


et du coup c = max(a)


Ça marche aussi avec les nombres négatifs.

Donc en somme on peut tout comprimer en

print max(int(x) for x in iter(raw_input,''))


Là je nage, c'est pas grave, faut que j'avance.

Avatar
NicolasP

Pour les nombres négatifs, j'ai essayé, cela ne marche pas, il me dit
que c'est zéro la valeur maximale. Pourtant avec une condition comme :
if i < -5:
i=int(i)
c=i
print c
la boucle trie correctement les valeurs négatives.


Et c'est normal. Dans l'algo de départ, 0 est toujours supérieur à une valeur négative. Donc le résultat est 0.
Si tu veux que ça marche, il faut initialiser c avec la plus petite valeur qui existe pour un entier. Et je ne te la donnerais pas car je ne la connaît pas en python.
Il y a des chances pour que ce soit -(2^32 - 1) pour un python 32bits et -(2^64 - 1) pour un python 64bits mais je dis peut-être une bêtise...


Nicolas

Avatar
NicolasP
la connaît pas en python. Il y a des chances pour que ce soit -(2^32 -
1) pour un python 32bits et -(2^64 - 1) pour un python 64bits mais je


Oups, je voulais dire respectivement -(2^(32-1)) et -(2^(64-1)).

1 2 3