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

Beginner Issue; string index out of 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" 个原始字母将其打印回给他们,并从中生成新的字符串。 我遇到的问题是这段代码在 反向 += 单词[索引] 帮助或实现相同结果的更好方法是 mucho apreciado。

反转 python 中的单词比

更简单
reversed = forward[::-1]

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

您将要使用 "range" 功能。

range(start, stop, step)

Returns一个列表从开始到停止逐步递增(或递减)。然后你可以遍历列表。总之,它看起来像这样:

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])

这是因为您没有更改 index

的值

修改:

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

也就是说,每次循环获取 word

的当前最后一个字母时,都必须减少索引

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

index 始终保持不变。假设用户输入了一个四个字母的单词,比如 abcd。索引将设置为三 (index = len(word) - 1)。然后在循环的第一次迭代期间,word 将减少为 abc (word = 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)])

编码愉快!