Python错误:“IndexError:字符串索引超出范围”

时间:2012-01-03 12:58:15

标签: python python-3.x

我目前正在从一本名为“绝对初学者的Python(第三版)”的书中学习python。书中有一个练习,概述了刽子手游戏的代码。我跟着这段代码,但是我一直在程序中间找回错误。

以下是导致问题的代码:

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

这也是它返回的错误:

new += so_far[i]
IndexError: string index out of range

有人可以帮助我解决出错的问题以及我可以采取哪些措施来解决问题?

编辑:我初始化了so_far变量,如下所示:

so_far = "-" * len(word)

4 个答案:

答案 0 :(得分:14)

看起来你缩进so_far = new太多了。试试这个:

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 # unindented this

答案 1 :(得分:6)

您正在迭代一个字符串(word),但随后使用索引来查找so_far中的字符。无法保证这两个字符串具有相同的长度。

答案 2 :(得分:2)

当猜测次数(so_far)小于单词的长度时,会发生此错误。您是否错过了某个变量so_far的初始化,将其设置为

so_far = " " * len(word)

修改

尝试类似

的内容
print "%d / %d" % (new, so_far)

在抛出错误的行之前,所以你可以看到到底出了什么问题。我唯一能想到的是so_far在不同的范围内,而你实际上并没有使用你想到的实例。

答案 3 :(得分:0)

您的代码中存在多个问题。 在这里,您有一个可以分析的功能版本(让我们将'hello'设置为目标词):

word = 'hello'
so_far = "-" * len(word)       # Create variable so_far to contain the current guess

while word != so_far:          # if still not complete
    print(so_far)
    guess = input('>> ')       # get a char guess

    if guess in word:
        print("\nYes!", guess, "is in the word!")

        new = ""
        for i in range(len(word)):  
            if guess == word[i]:
                new += guess        # fill the position with new value
            else:
                new += so_far[i]    # same value as before
        so_far = new
    else:
        print("try_again")

print('finish')

我尝试用py2k ide为py3k写它,小心错误。