Python 2-使用变量代替数字来获取字符串中的字母

时间:2016-01-20 22:12:18

标签: python

我找到了我解决方案的解决方案,但是当我做到时,要么找不到它,要么不理解它。我对编码很新。我正在制作一个具有额外功能的猪拉丁语翻译器,它可以翻译成猪拉丁语。我的翻译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.")

2 个答案:

答案 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}}