Erreur invisible!

Résolu
iron uchiwa Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   -  
iron uchiwa Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Ce script python ne marche pas après bonne heur de tentative de débogage
je n'y suis toujours pas, même après être aller voir la correction de l'exercice qui ressemble trait pour trait au mien:
def changeCar(ch, ca1, ca2, start=0, end=-1):
"fonction qui remplace les car ca1 par ca2 dans ch"
if end == -1:
end = len(ch)
nch, i = "", 0
while i <= len(ch):
if i >= start and i <= end and ch[i] == ca1:
nch = nch + ca2
else:
nch = nch + ch[i]
i+=1
return nch

phrase = "aidez moi a changer les caractère de cette phrase svp.."
print(changeCar(phrase, " ", "*",))

l'exécution de ce code me donne:

Traceback (most recent call last):
File "changecar.py", line 15, in <module>
print(changeCar(phrase, " ", "*",))
File "changecar.py", line 7, in changeCar
if (i >= start)and(i <= end)and(ch[i] == ca1):
IndexError: string index out of range

Je ne comprend toujours pas ce qui ne va pas.
Merci, cordialement.
A voir également:

2 réponses

JulienJust Messages postés 149 Date d'inscription   Statut Membre Dernière intervention   18
 
Bonjour,

En fait l'erreur est bien visible: le problème est le "if".
Donc si on retire la boucle "while" et la "if" pour les remplacer par un "for" tu veras que ça marche nickel :)

#!/usr/bin/env python
# -*- coding: utf-8 -*-

def changeCar(ch, cal, ca2, end = -1):
"fonction qui remplace les car cal par ca2 dans ch"
if end == -1:
end = len(ch);
nch = "";
for i in range(0, end):
if ch[i] == cal:
nch = nch + ca2;
else:
nch = nch + ch[i];
i = i+1;

return nch

phrase = "aides moi a changer les caracteres de cette phrase svp.."
print changeCar(phrase," ","*");
1
iron uchiwa Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   15
 
sa marche nickel :) merci beaucoup! Je comprend que l'erreur viens du if mais je ne vois vraiment pas pourquoi le code d'origine ne marche pas...
0
pols12 Messages postés 1143 Date d'inscription   Statut Membre Dernière intervention   119
 
Salut
Le problème est très courant et pourtant très simple. Tu as l'erreur "index out of range" qui signifie que tu demande à accéder à un élément de la liste qui n'existe pas.
Il faut que tu te rappelles de deux choses :
- len() te donne le nombre de caractères d'une chaîne, donc len("de")=2
- une chaîne de caractère est une liste et comme toute liste, le premier élément a l'index 0 ET PAS 1 !

Ca veut dire que si tu fait une boucle qui va de 0 à len("de") en affichant un les caractère, Python va vouloir afficher l'élément d'index 0, le "d", l'élément d'index 1, le "e" puis l'élément d'index 2 qui n'existe pas. Tu as alors l'erreur "index out of range". Donc deux choix : while (i<=len("de")-1) ou bien while(i<len("de")

Je pense que tu devrais être capable d'adapter ça à ton problème. ;) Sinon re-poste ici et j'essaierai d'être plus clair.
0
iron uchiwa Messages postés 57 Date d'inscription   Statut Membre Dernière intervention   15
 
Je n'avais pas vu le dernier message, impossible d'être plus clair! Comprendre d'où viens l'erreur m'éviteras de la refaire, merci beaucoup pour ta patience ;)
0