我尝试编写程序,从输入中构建新单词,其中字母反之亦然
# vise versa
print ("word vise versa")
word = input("Input your text ")
new_word = ""
while word:
position = len(word) - 1
for letter in word:
new_word += letter[position]
position -= 1
print(new_word)
总是有错误
Traceback (most recent call last):
File "4_2.py", line 9, in <module>
new_word += letter[position]
IndexError: string index out of range
我做错了什么?
谢谢!
答案 0 :(得分:1)
麻烦可能就是你在下面的行中所做的
for letter in word:
new_word += letter[position]
其中字母是单词中的每个字母,首先是&#39; a&#39;然后&#39; b&#39;然后&#39; c&#39;如果单词是abc
。在秒数字符串上,您尝试使用字母&#39; a&#39;作为一个数组,这是不好的。您可能想要替换为单词数组?
答案 1 :(得分:0)
首先在你的代码中,如果你的输入不是None或False Value,你的循环将永远存在,因为word不是一个假值。
其次,您可以使用字符串的反向切片或类似的列表:
# vise versa
print("word vise versa")
word = raw_input("Input your text ")
new_word = ""
if word:
new_word = word[::-1]
print(new_word)
答案 2 :(得分:0)
raw_input
方法len
方法获取输入字的长度。while
循环在新变量中添加字符。按1
print "Program: word vise versa"
word = raw_input("Input your text:")
new_word = ""
wdlen = len(word)
while wdlen:
new_word += word[wdlen-1]
wdlen -= 1
print new_word
输出:
$ python test.py
Program: word vise versa
Input your text:abcdef
fedcba
使用slice
。
更多信息https://docs.python.org/2/whatsnew/2.3.html#extended-slices
>>> a = "12345"
>>> a[::-1]
'54321'
答案 3 :(得分:0)
您可以将代码重写为像这样的oneliner:
new_word = "".join(reversed(input("Input your text ")))
reversed
函数采用序列类型,并以相反的顺序返回一个新元素。但是,现在这将是一个列表。
然后"".join
将它们连接回一个字符串 - 必须提供一些连接字符串,因此使用任何空字符串。
使用较少的行,没有临时变量,此代码中断的位置较少。