索引超出范围 - Python

时间:2016-10-24 22:09:52

标签: python-3.x

当我收到此错误时,我正在使用Kata在CodeWars上编程:

Traceback:
   in 
   in title_case
IndexError: list index out of range

这是我的代码:

def title_case(title, minor_words=1):
    string = title.split()
    outList = []
    if minor_words != 1:
        split = minor_words.split()
        minor = [x.lower() for x in split]
    out = ""
    for i in range(0, len(string)):
        word = ""
        for j in range(0,len(string[i])):
            elem = ""
            elem += string[i][j]
            if j == 0:
                word += elem.upper()
            else:
                word += elem.lower()
        if i != len(string)-1:
            outList.append(word+" ")
        else:
            outList.append(word)
    list = [x.lower() for x in outList]
    print ((list[0]))#Just for debug
    if minor_words != 1:
        for i in range(0, len(outList)):
            if (list[i] in minor):
                print("OI")#Just for debug
                out += list[i]
            else:
                out += outList[i]
    return out

嗯,这当然是在尝试执行代码时发生的! 初始化此函数的一种方法是:

title_case(' KINGS'的冲突,' a')

0元素存在,但它说它不会,我不知道为什么,因为当我写" print(list)"它向我显示了列表的元素,在这种情况下," [' a','冲突','','国王&# 39;]"

我该怎么办?

1 个答案:

答案 0 :(得分:1)

好的,基于阅读此代码,我认为您希望得到以下结果: title_case('a clash of KINGS', 'a an the of')是: 国王的冲突

所以看起来你正试图通过很多努力来实现目标。当我浏览代码时,我花了一段时间才看到实际发生的事情。我也冒昧地让你的变量更加一致地命名。而不是随机混合caseLetter和case_letter,我使它保持一致。我还让你的循环更容易阅读。也适用于minorWords的论点。也可能将它作为列表传递,而不是将其转换为函数内的列表。无论如何,我希望这有帮助。

def titleCase(title, minorWords=[]):
    titleList = [x.lower() for x in title.split()]
    outList = []

    for Word in titleList:
        if Word not in minorWords:
            Word = Word.capitalize()
        outList.append(Word)

    return " ".join(outList)

TitleCased = titleCase("a clash of KINGS", ["an", "the", "of"])
print (TitleCased)

根据您的问题以及我如何理解您的代码是您想要实现的目标,我相信哪些输出A Clash of Kings?或者,如果您在次要词汇中包含a,则为:

a Clash of Kings

无论如何,希望这能回答你的问题!