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)被认为是例外,并且被完全放在小写,则字符串被认为是大写的,除非它是大写的第一个单词。
编写一个函数,将字符串转换为标题大小写,给出一个可选的异常列表(较小的单词)。次要单词的列表将作为一个字符串给出,每个单词由一个空格分隔。您的函数应该忽略次要单词字符串的情况--即使小单词字符串的大小写发生了更改,它也应该以相同的方式运行。
我试图不使用大写()来执行this.It,似乎我的代码在我的计算机上运行得很好,但是代码大战只是提示"IndexError: list索引超出范围“。
发布于 2016-09-30 18:13:05
如果title有前导或尾随空格或两个连续空格(如"foo bar" ),代码就会中断。它还会在空字符串上中断。这是因为任何一种标题上的title.lower().split(" ")都会给您一个空字符串,作为您的“单词”之一,然后temp[0]将在稍后导致一个IndexError。
您可以通过使用没有参数的split()来避免这个问题。它将在任意组合的任何类型的空格上拆分。多个空格将被视为一个空格,而前导或尾随空格将被忽略。当调用split时,空字符串将变为空列表,而不是包含一个空字符串的列表。
发布于 2016-09-30 18:20:41
作为@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我在其他输入(非空白)上尝试了您的解决方案,它工作得很好。
https://stackoverflow.com/questions/39797434
复制相似问题