初学者问题;字符串索引超出范围

时间:2015-08-07 20:56:44

标签: python string indexing range

# word reverser
#user input word is printed backwards

word = input("please type a word")

#letters are to be added to "reverse" creating a new string each time
reverse = ""

#the index of the letter of the final letter of "word" the users' input
#use this to "steal" a letter each time
#index is the length of the word - 1 to give a valid index number
index = len(word) - 1

#steals a letter until word is empty, adding each letter to "reverse" each time (in reverse)
while word:
    reverse += word[index]
    word = word[:index]
    print(reverse)

print(reverse)
input("press enter to exit")

制作一个简单的程序,向后拼写用户输入的单词并通过" stealing"将其打印回来。来自原文的字母并从中创建新字符串。 我遇到的麻烦就是这段代码会回退一个字符串索引超出范围错误 反向+ =单词[索引] 帮助或更好的方法来实现相同的结果是非常好的。

4 个答案:

答案 0 :(得分:3)

在python中反转一个单词比这简单:

reversed = forward[::-1]

我不会使用循环,它会更长,更不易读。

答案 1 :(得分:2)

虽然其他人已经指出了在Python中反转单词的多种方法,但我认为这是你的代码的问题。

index始终保持不变。让我们说用户输入一个四个字母的单词,如abcd。索引将设置为三(index = len(word) - 1)。然后在循环的第一次迭代期间,word将减少为abcword = word[:index])。然后,在循环的下一次迭代期间,在它内部的第一行(reverse += word[index])上,您将得到错误。 index仍然是三个,因此您尝试访问index[3]。但是,由于word被缩短,因此不再有index[3]。您需要每次迭代减少index一次:

while word:
    reverse += word[index]
    word = word[:index]
    index -= 1

这是另一种在Python中反转单词的方法(尽管Wills代码是最好的):

reverse = "".join([word[i-1] for i in range(len(word), 0, -1)])

快乐的编码!

答案 2 :(得分:1)

您将要使用"range"功能。

range(start, stop, step)

逐步返回从开始到停止增加(或减少)的列表。然后你可以遍历列表。总之,它看起来像这样:

for i in range(len(word) -1, -1, -1):
    reverse += word[i]
    print(reverse)

或者更简单的方法是使用string slicing直接反转单词然后迭代它。像这样:

for letter in word[::-1]:
    reverse += letter
    print(reverse)

按照现在编写的方式,它不仅会向后打印单词,而且还会打印向后单词的每个部分。例如,如果用户输入" Hello"它会打印

o
ol
oll
olle
olleH

如果您只想向后打印这个词,最好的方法就是

print(word[::-1])

答案 3 :(得分:1)

这是因为您没有更改index

的值

<强>修饰:

while word:
    reverse += word[index]
    word = word[:index]
    index-=1
print(reverse)`

每次循环获取word的当前最后一个字母时,你必须减少索引