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