2017-05-20 7 views
0

1つのドットを加えて式の最初の文字をすべて大文字にする関数を持つプログラムを作成しようとしています。たとえば、hello worldと書くと、結果はH.W.でなければなりません。Pythonで文字関数を大文字にする

私のプログラムは次のとおりです。

def initials(Hello World): 

    words = input.split(' ') 
    initials_words = [] 
    for word in words: 
     title_case_word = word[0].upper() 
     initials_words_words.append(title_case_word) 
     output = '. '.join(initials_words) 
    return (initials_words) 

コンパイラはそれがすべてのエラーをnootexitないようだが、私はexressionを与えることを試みるときのような:print (initials(Hello World)コンパイラは私にどんな結果を与えるものではありません。

答えて

0

6行目でコードを実行しようとするとエラーが表示されます。initials_words_words.append(title_case_word)

NameError: name 'initials_words_words' is not defined

これを修正した後、プログラムはうまくいきました。これはそれを行うだろうinitials_words.append(title_case_word)

1

にそれを変更してみてください:

def initials(input_text): 
    return "".join(["%s." % w.upper()[0] for w in input_text.split()]) 
+0

あなただけの、大文字に文字列全体を必要としないので、あなたは 'W [0] .upperを()'使用することができます最初の手紙。また、 'str.format'は'% '-formattingよりも少し優れています(しかし、それはほとんどの好みの問題です)。 – MSeifert

1

は、私はいくつかの問題を識別:

  • あなたはinputと呼ばれるパラメータを取るために、あなたの関数のシグネチャを変更する必要があります。これが変数splitです。 NB:inputも組み込み関数なので、別の変数名を使う方が良いでしょう。

  • ループ内にinitial_wordsの代わりにinitial_words_wordsを使用します。

  • あなたはoutputを割り当てますが、使用しないでください。おそらくループ外にあり、返されているはずです。

  • 返信時に()は必要ありません。

ので、変更されたプログラムは、次のようになります。

def initials(my_input): 

    words = my_input.split(' ') 
    initials_words = [] 
    for word in words: 
     title_case_word = word[0].upper() 
     initials_words.append(title_case_word + '.') 
    output = ''.join(initials_words) # or ' '.join(initials_words) if you want a seperator 
    return output 


print(initials('Hello World')) # H.W. 
関連する問題