代码大战:带有python的标题案例

时间:2016-09-30 18:00:17

标签: python indexing

def title_case(title, minor_words = 0):
    title = title.lower().split(" ")
    title_change = []
    temp = []
    if minor_words != 0 :
        minor_words = minor_words.lower().split(" ")
        for i in range(len(title)):
            if (i != 0 and title[i] not in minor_words) or (i == 0 and title[i] in minor_words):
                temp = list(title[i].lower())
                temp[0] = temp[0].upper()
                title_change.append("".join(temp))
            else:
                title_change.append(title[i])
            temp = []
    else:
        for i in range(len(title)):
            temp = list(title[i])
            temp[0] = temp[0].upper()
            title_change.append("".join(temp))
            temp = []
    return " ".join(title_change)

您好,这是我的python代码。 这是个问题: 如果字符串中的每个单词都是(a)大写(即,只有单词的第一个字母是大写字母)或(b)被认为是例外并完全放入字符串,则字符串被认为是标题大小写小写,除非它是第一个单词,它总是大写的。

编写一个函数,将字符串转换为标题大小写,给出一个可选的异常列表(次要单词)。次要单词列表将以字符串形式给出,每个单词用空格分隔。您的函数应该忽略次要字符串的情况 - 即使更改次要字符串的大小写,它也应该以相同的方式运行。

我正在尝试不使用capitalize()来执行此操作。似乎我的代码在我的计算机上工作正常,但代码大战只是提示“IndexError:list index out of range”。

2 个答案:

答案 0 :(得分:2)

如果title具有前导或尾随空格,或两个连续的空格,例如"foo bar",则代码将中断。它也会打破一个空字符串。这是因为title.lower().split(" ")对任何这类标题都会给你一个空字符串作为你的一个单词"然后temp[0]会导致{{1}稍后。

您可以使用不带参数的IndexError来避免此问题。它将以任何组合分割在任何类型的空白上。多个空格将被视为一个空格,并且将忽略前导或尾随空格。调用split()时,空字符串将变为空列表,而不是包含一个空字符串的列表。

答案 1 :(得分:0)

作为@ Blckknght解释的补充,这是一个有启发性的控制台会话,可以逐步完成变量的发生。

>>> title = ''
>>> title = title.lower().split(' ')
>>> title
['']
>>> temp = list(title[0])
>>> temp
[]
>>> temp[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

我在其他(非空白)输入上尝试了你的解决方案,它运行正常。