# 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"将其打印回来。来自原文的字母并从中创建新字符串。 我遇到的麻烦就是这段代码会回退一个字符串索引超出范围错误 反向+ =单词[索引] 帮助或更好的方法来实现相同的结果是非常好的。
答案 0 :(得分:3)
在python中反转一个单词比这简单:
reversed = forward[::-1]
我不会使用循环,它会更长,更不易读。
答案 1 :(得分:2)
虽然其他人已经指出了在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)])
快乐的编码!
答案 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
的当前最后一个字母时,你必须减少索引