2017-12-08 12 views
1

以下に書かれているコードは、以下のような結果を与えるはずです。たとえば、入力が「Lion head and Snake tail」の場合、出力は「LHAST」になります。頭字語を作るためのPythonコーディングの欠陥

代わりに、結果は 'LLLLL'です。私のコードをチェックしてください。可能であれば、より良い練習を提案し、より良いコードで私を助けてください。次のように

コードは次のとおりです。

#ask for Input 
name = input('Input words to make acroname :') 

#make all in caps 
name = name.upper() 

#turn them in list 
listname = name.split() 

#cycle through 
for namee in listname: 
    #Get the first letter & type in same line 
    print(name[0],end="") 
print() 

input (' press a key to move out') 
+1

ためraw_input('')ためには、[SO]へようこそ!私たちのエディタについて知っておくべき1つのこと。質問を編集したら、コードスニペットを強調表示し、 '{}'ボタンをクリックしてください。それは最大の可読性を得るためにコードをフォーマットします。 –

+4

'name [0]'ではなく、 'namee [0]'を意味しています。タイプミスとしてクローズする投票。 – Carcigenicate

+0

ありがとう@Carcigenicate –

答えて

1

あなたはあなたのコードを修正することができます。 print(name[0])の代わりに、print(namee[0])を使用して、元の名前ではなく単語の最初の文字を印刷する必要があります。

このようなタイプミスを避けるため、変数をよりわかりやすく表現することをお勧めします。

あなたが同じ行に頭字語を印刷したい場合は、私が所望の出力で変数acronymを取得するためのコードの下に使用することをお勧め:

phrase = raw_input('Input words to make acronym:') 
phrase = phrase.upper() 
list_words = phrase.split() 
acronym = [word[0] for word in list_words] 
acronym = "".join(acronym) 
print acronym 
+1

または、一行に 'acronym =" ".join(phrase.split()内の単語の単語[0])。 –

0

あなたは1行のソリューションをgenerator-expressionstr.joinを使用することができます問題へ:

>>> name = "Lion head and Snake tail" 
>>> ''.join(i[0].upper() for i in name.split()) 
'LHAST' 

なぜですか?

私たちが発電機の内側から始めれば、私たちはname.split()を繰り返しています。 の.splitメソッドは、メソッドに渡されたものを分割することによって見つけられたすべての異なるstringslistを返します。デフォルトの文字は空白です。単語が必要なので、これは私たちにとってはうまくいきます。

次に、listの各単語iについて、文字列の最初の文字をi[0]とします。 str.upper()で大文字に変換します。

最後に、これらすべての文字を一緒に結合することです。それはstr.joinメソッドで行われます。単に

0

print ''.join([P[0] for P in input('Input words to make acroname :').upper().split()]) 

使用input('')のpython 3とPython 2

関連する問題