Retourner une liste [Résolu/Fermé]

Signaler
Messages postés
3
Date d'inscription
dimanche 9 novembre 2014
Statut
Membre
Dernière intervention
9 novembre 2014
-
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
-
Bonjour,

Je cherche a écrire un programme dans lequel j'ai besoin soit de retourner une liste, soit de la parcourir dans le sens inverse.

Je pensais qu'avec range (len(liste), 0) cela fonctionnerai pour la parcourir du dernier élemet au premier mais manifestement pas.

Pourriez vous m'indiquer au moins une des deux méthodes et dans l'idéal les deux.

Merci
A voir également:

3 réponses

Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
Bonjour,

Pour range(), il ne faut pas oublier le pas : -1.
Il faudrait que tu montres ton programme.
Note : pense bien à utiliser la balise "code".
Exemple :
<code python>ici ton code</code>

Google is your friend
Messages postés
3
Date d'inscription
dimanche 9 novembre 2014
Statut
Membre
Dernière intervention
9 novembre 2014

En fait le but du programme est de pouvoir convertir un binaire en décimal, voila ce que j'ai tapé :

print ('Entrez le nombre que vous souhaitez convertir en decimal :')
nbre_a_convertir = input ()

#On transforme le nombre binaire entré par l'utilisateur en une liste
# comportant les chiffres de ce nombre afin de pouvoir les traiter 1 a 1
L = [int(i) for i in str(nbre_a_convertir)]
print L

nbre_converti = 0
for i in range (len(L),0,-1) :
if L[i] == 0 :
nbre_converti += 0
if L[i] == 1 :
nbre_converti += 2**i

print nbre_converti

Je l'exécute, je rentre le nombre que je souhaite, il me créer et affiche la bonne liste puis m'affiche le message d'erreur suivant :

if L[i] == 0 :
IndexError: list index out of range

Je n'ai pas compris l'histoire de balise...
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
if L[i] == 0 :
     nbre_converti += 0
if L[i] == 1 :
     nbre_converti += 2**i 

nbre_converti+=0 est inutile. Tu peux mettre l'instruction pass à la place.
Sinon, tu peux être plus concis :
nbre_converti+=L[i]* 2**i

for i in range (len(L),0,-1) :
Attention. len(L) vaut le nombre d'élément dans ta liste. Donc si tu fais L[i] ça plantera. Il faudrait plutôt faire : for i in range (len(L)-1,-1,0)
D'ailleurs, utilise plutôt xrange() que range().

Pour l'histoire de la balise, il n'y a rien à comprendre. Il suffit de remplacer "TON CODE" par ton code dans la phrase ci-dessous :
<code python>TON CODE</code>
Exemple :
<code python>print i</code>
Messages postés
3
Date d'inscription
dimanche 9 novembre 2014
Statut
Membre
Dernière intervention
9 novembre 2014

Effectivement c'est plus joli et concis comme ca.
Quelle est la différence entre range et xrange ?

Du coup voila ou en est mon programme :

L = [int(i) for i in str(nbre_a_convertir)]
print L

nbre_converti = 0
for i in range (len(L)-1,0,-1) :
    nbre_converti += L[i]* 2**i
    
print nbre_converti


Mais la c'est la débandade, je te copie quelques exemples de résultat :

"Entrez le nombre que vous souhaitez convertir en decimal :
1011
[1, 0, 1, 1]
12

Entrez le nombre que vous souhaitez convertir en decimal :
1101
[1, 1, 0, 1]
10

Entrez le nombre que vous souhaitez convertir en decimal :
1111
[1, 1, 1, 1]
14

Entrez le nombre que vous souhaitez convertir en decimal :
10111
[1, 0, 1, 1, 1]
28
"

alors que les bons résultats sont 11, 13, 15 et 23
T'as une idée du problème ?
Messages postés
11066
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 766
Ca vient d'ici :
range (len(L)-1,0,-1)
C'est range(len(L)-1,-1,-1)

range(...) retourne une liste tandis que xrange() est un générateur. Donc, c'est moins gourmand en mémoire d'utiliser xrange().