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”。
答案 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
我在其他(非空白)输入上尝试了你的解决方案,它运行正常。