我找到了我解决方案的解决方案,但是当我做到时,要么找不到它,要么不理解它。我对编码很新。我正在制作一个具有额外功能的猪拉丁语翻译器,它可以翻译成猪拉丁语。我的翻译TO工作完美,但是当翻译FROM时我得到一个名为" IndexError:字符串索引超出范围的错误"在第19行," end = word [length]"是。现在,我需要知道在Python中使用变量替换整数是否有效,或者在代码中的其他地方是否存在问题。 (请注意,我确实有一些代码,以确保我的变量是一个整数。)
print "Welcome to pig-latin translater!"
word = raw_input("What word do you want to translate?")
continue1 = False
while continue1 == False:
tofrom = str(raw_input("Do you want to translate to or from pig-latin?"))
tofrom = tofrom.lower()
if tofrom == "to":
length = len(word)
start = word[0]
end = word[1:length]
translation = end + start
word = str.title(word)
translation = translation.lower()
print "%s in pig-latin is %s." % (word, translation)
continue1 = True
elif tofrom == "from":
length = len(word)
length = int(length)
end = word[length]
length = length - 1
start = word[0:length]
translation = end + start
word = str.title(word)
translation = translation.lower()
print "%s is %s in English." % (word, translation)
continue1 = True
else:
print "Please answer to or from."
end = raw_input("Press enter to exit.")
答案 0 :(得分:2)
我不太了解你的问题。但我相信你忘记了迭代列表从0开始 因此,如果要访问字符串的最后位置,则应从其中减去1的长度。
word = "ABC def"
length = len(word) # 7
end = word[length - 1] # because there is no 7th element, only 0123456
你可以在这里改进:
length = len(word)
length = int(length) # len() already returns int, no need to convert this again
end = word[length] # here is the issue I have provided answer abowe
length = length - 1 # this line should be above aboves line
另外,你不需要知道字符串的长度。你可以使用这样的表达式:
end = word[1:] # means from 1st element to the end
答案 1 :(得分:0)
现在是学习索引Python序列的一些基础知识的时候了。
首先,正如前面的回答所指出的那样,序列以索引0开始;最后一个元素是索引len-1。
您也可以使用负数从另一端索引:最后一个元素是-1,倒数第二个是-2,依此类推。
当您进行切片时,可以省略起始索引为0或结束索引为-1。
我认为你意识到这还不行......移动单个字符不是猪拉丁语的正确转换。但是,这是增量编程的一个很好的例子:一次做一两个小的添加,测试那些,然后继续。我建议您接下来开始使用外部流控制:使这个循环 ad lib ,这样您就可以测试多个输入,而无需为每个单词重新启动程序。
{{1}}