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

Python 初学者问题;字符串索引超出范围,python,string,indexing,range,Python,String,Indexing,Range,正在努力制作一个简单的程序,将用户输入的单词向后拼写,然后通过从原始单词中“窃取”字母并从中生成新字符串将其打印回用户。 我遇到的问题是,这段代码返回了一个字符串索引超出范围的错误 反向+=单词[索引] 实现相同结果的帮助或更好的方法是非常特别的。在python中反转一个单词比这更简单: # word reverser #user input word is printed backwards word = input("please type a word") #letters are t

正在努力制作一个简单的程序,将用户输入的单词向后拼写,然后通过从原始单词中“窃取”字母并从中生成新字符串将其打印回用户。 我遇到的问题是,这段代码返回了一个字符串索引超出范围的错误 反向+=单词[索引]
实现相同结果的帮助或更好的方法是非常特别的。

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

# 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")

我不会使用循环,它较长且可读性较差。

您将需要使用该函数

reversed = forward[::-1]
返回从开始到停止按步骤递增(或递减)的列表。然后您可以遍历列表。总的来说,它看起来是这样的:

range(start, stop, step)
或者更简单的方法是直接反转单词,然后迭代。像这样:

for i in range(len(word) -1, -1, -1):
    reverse += word[i]
    print(reverse)
按照现在的书写方式,它不仅会向后打印单词,还会向后打印单词的每个部分。例如,如果用户输入“Hello”,它将打印

for letter in word[::-1]:
    reverse += letter
    print(reverse)
如果你只是想把单词倒着打印,最好的方法就是

o
ol
oll
olle
olleH

这是因为您没有更改
索引的值

修改:

print(word[::-1])

也就是说,每次循环获取
单词的当前最后一个字母时,您都必须减少索引,而其他人已经指出了多种在Python中反转单词的方法,下面是我认为您的代码存在的问题

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

while word:
    reverse += word[index]
    word = word[:index]
    index-=1
print(reverse)`
这里还有另一种在Python中反转单词的方法(尽管Wills代码是最简洁的):


快乐编码

reverse+=…
行的前面放一行
print(index,len(word))
,看看会发生什么。Python字符串没有
pop
函数。真尴尬,我总是把字符串当作列表。修好了,谢谢!
while word:
    reverse += word[index]
    word = word[:index]
    index -= 1
reverse = "".join([word[i-1] for i in range(len(word), 0, -1)])