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 -
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:
l'exécution de ce code me donne:
Je ne comprend toujours pas ce qui ne va pas.
Merci, cordialement.
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:
- Caractère invisible instagram
- Caractère ascii - Guide
- Caractère spéciaux - Guide
- Télécharger instagram pc - Télécharger - Divers Communication
- Caractères spéciaux : comment les saisir facilement - Guide
- Brouillon instagram - Guide
2 réponses
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 :)
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," ","*");
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...
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.
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.