Python erreur: “IndexError: string index out of range”
Je suis actuellement en apprentissage de python à partir d'un livre intitulé " Python pour le débutant absolu (troisième édition)'. Il y a un exercice dans le livre, qui décrit un code pour un jeu du pendu. J'ai suivi le long avec ce code, cependant, je reçois en retour une erreur dans le milieu du programme.
Voici le code qui est à l'origine du problème:
if guess in word:
print("\nYes!", guess, "is in the word!")
# Create a new variable (so_far) to contain the guess
new = ""
i = 0
for i in range(len(word)):
if guess == word[i]:
new += guess
else:
new += so_far[i]
so_far = new
C'est aussi l'erreur, il renvoie:
new += so_far[i]
IndexError: string index out of range
Quelqu'un pourrait-il m'aider à sortir de ce qui ne va pas et ce que je peux faire pour le réparer?
edit: j'ai initialisé le so_far variable comme ceci:
so_far = "-" * len(word)
C'est mineur et non reliés à votre question, mais vous n'avez pas besoin de la i = 0. Pour la boucle définit automatiquement la variable de boucle quand il commence même si je n'est pas encore définie.
Ouais votre droite. Je ne me souviens pas pourquoi j'ai bloqué :S
Ouais votre droite. Je ne me souviens pas pourquoi j'ai bloqué :S
OriginalL'auteur Darkphenom | 2012-01-03
Vous devez vous connecter pour publier un commentaire.
Il semble que vous en retrait
so_far = new
trop. Essayez ceci:OriginalL'auteur Rob Wouters
Vous êtes une itération sur une chaîne (
word
), mais ensuite, à l'aide de l'index en l'air d'un personnage dansso_far
. Il n'y a aucune garantie que ces deux chaînes ont la même longueur.OriginalL'auteur unwind
Cette erreur se produit lorsque le nombre d'essai (so_far) est inférieure à la longueur de la parole. Avez-vous manquez une initialisation de la variable so_far quelque part, qu'il définit à quelque chose comme
?
Edit:
essayer quelque chose comme
avant la ligne qui génère l'erreur, de sorte que vous pouvez voir exactement ce qui va mal. La seule chose que je peux penser, c'est que so_far est dans un autre champ, et vous n'êtes pas vraiment à l'aide de l'exemple que vous en pensez.
Édité ma réponse d'ajouter un chemin à déboguer, et une autre suggestion quant à ce qui peut être mauvais.
Et il semble que @Rob Wouters l'ai eu, j'ai manqué. Il a raison, so_far doit être à l'extérieur du bloc 🙂
OriginalL'auteur CNeo
Il y avait plusieurs problèmes dans votre code.
Ici vous avez une version fonctionnelle vous pouvez analyser (Permet de définir des "bonjour" comme le mot cible):
J'ai essayé de l'écrire pour py3k avec un py2k ide, être prudent avec les erreurs.
Rob, vous avez raison
Ouais j'ai pris un petit segment de code pour obtenir le point. Merci pour elle cependant.
OriginalL'auteur joaquin