2016-10-16 32 views
0

私のコードに問題があります。この例では、The Wind in the Willowsが印刷されますが、の風がに印刷されます。問題は置換関数が実行されないことだと私は思う。私はこのコードの何が悪いのか分かりません。助けてください。文字列のリスト内の文字列を置換する

PS。この関数の基本的な考え方は、例外(minor_words)でタイトルのlookalike文字列を返すことです。 (minor_wordstitleの最初の単語の場合はケースにもかかわらず)Minor_wordsは、タイトルに小文字でなければならない

def title_case(title, minor_words): 
    exc = [x for x in title.lower().split() if x in minor_words.lower().split()] 
    for string in exc: 
     if title.split().index(string) == 0: 
      title = title.title() 
     else: 
      title = title.title().replace(string, string.lower()) 
    return title 


print (title_case('THE WIND IN THE WILLOWS', 'The In')) 

答えて

1

ループ内でtitleに割り当てるので、タイトルの値はループを通し最後に割り当てられた値と同じになります。

私はこれを別の方法で行っています。タイトルの中のすべての単語(除外だけではない)と除外されていないタイトルケースをループします。

2
def title_case(title, minor_words): 
    # lowercase minor_words and make a set for quicker lookups 
    minor_set = set(i for i in minor_words.lower().split()) 
    # tokenize the title by lowercasing 
    tokens = title.lower().split() 
    # create a new title by capitalizing words that dont belong to minor_set 
    new_title = ' '.join(i if i in minor_set else i.capitalize() for i in tokens) 
    # Finally return the capitalized title. 
    if len(new_title) > 1: 
     return new_title[0].upper() + new_title[1:] 
    else: 
     # Since its just one char, just uppercase it and return it 
     return new_title.upper() 

出力:

>>> print (title_case('THE WIND IN THE WILLOWS', 'The In')) 
The Wind in the Willows 
+0

これは "柳"を大文字にしません –

+0

文字列全体に大文字を使用しましたが、今修正しました。ありがとう。 – sisanared

0
for x in minor_words.split(): 
     title = title.replace(x,x.lower()) 

私は少し混乱しています私が思うことができないので、あなたがしようとしていることについて正確に何をしようとしているのですか?titleのすべての単語が小文字のコピーであるminor_wordsに置き換えられます。 title = title.title()[0]+title[1:]

+0

'title.title()'が間違っています。私は別の変数名 –

+0

@ cricket_007を提案したいと思います。それは私にそれを残したので、OPに彼のコードがあった方法です。 – Whud

関連する問題