2011-06-15 1 views
0
small_words = ('into', 'the', 'a', 'of', 'at', 'in', 'for', 'on') 
def book_title(title): 
    """ Takes a string and returns a title-case string. 
    All words EXCEPT for small words are made title case 
    unless the string starts with a preposition, in which 
    case the word is correctly capitalized. 

    >>> book_title('DIVE Into python') 
    'Dive into Python' 

    >>> book_title('the great gatsby') 
    'The Great Gatsby' 

    >>> book_title('the WORKS OF AleXANDer dumas') 
    'The Works of Alexander Dumas' 
    """ 
    lst_of_words = title.lower().split() 
    num_of_words = len(lst_of_words) 
    if num_of_words < 1: 
     return '' 
    new_title = lst_of_words.pop(0) 
    new_title = new_title[0].upper() + new_title[1:] 
    tpl_of_words = tuple(lst_of_words) 
    for word in tpl_of_words: 
     prep_word = False 
     for prep in small_words: 
      if prep == word: 
       new_title = new_title + ' ' + word 
       new_title = new_title + word 
       prep_word = True 
       break 
     if prep_word == True: 
      continue 
     new_title = new_title + ' '+ word[0].upper()+ word[1:] 
     new_title = new_title + word[0].upper() 
     new_title = new_title + word[1:] 
    return new_title 

def _test(): 
    import doctest, refactory 
    return doctest.testmod(refactory) 

if __name__ == "__main__": 
    _test() 

답변

2
return ' '.join((new[0].upper() + new[1:]) if (ix == 0 or new not in small_words) 
    else new for (ix, new) in enumerate(title.lower().split())) 
+0

감사 이그나시오 도와주세요. 나는 IX 변수를 제외한 다른 모든 것을 이해할 수있다. – python4gis

+0

') (열거''(인덱스, 요소)의 2 튜플을 산출 발전기를 돌려'곳 'element'는 전달 된 iterable로부터 차례대로 각 요소이고'index'는 0에서 시작하여 매번 1 씩 증가하는 정수입니다 –

+0

Title-case가 내장되어 있습니다 (3에서 제거하지 않는 한)? (new [0] .upper() + new [1 :])'new.title()에 쓸 수 있습니다. –

관련 문제