質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

1回答

401閲覧

文および熟語に含まれる単語ごとの頭文字をとってつなぎ合わせたい

Calamus

総合スコア5

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2020/04/08 01:55

前提・実現したいこと

Python初心者です。
Python3で文および熟語に含まれる単語ごとの頭文字をとってつなぎ合わせるプログラムを作っています。
inputを用いて入力するため、単語の数が異なる文でもうまく出力させることができるようにしたいと考え、スライスや変数を用いて出力するのではないかと考えましたがサイトや参考書を読んでみても該当する問題がなく進めない状況になっています。
どうかお教えして頂ければと思います。

発生している問題・エラーメッセージ

car //出力することは可能だが入力が3単語未満になった場合にエラーが起きてしまう(例:Don't worry と入力しても Runtime error になってしまう、など)

該当のソースコード

python3

1//空欄を取り除き、リスト化する 2N = input().split() 3 4//スライスを行って頭文字を取り出し、つなぎ合わせる 5print(N[0][0]+N[1][0]+N[2][0]) 6 7//"call and response" と入力

試したこと

a,b,c = input().split()
print(a[0]+b[0]+c[0])

のようなコードも試してみたのですが、このコードの場合でも3単語以未満の言葉が入力されてしまった場合に出力することができませんでした。
単語の数によって出力する言葉の長さが変わるため、range関数やfor関数、len関数を用いるのではないかとも考えましたが検索をかけてみても該当する問題がないため、コードを作成することができませんでした。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

range関数やfor関数、len関数を用いるのではないかとも考えましたが検索をかけてみても該当する問題がないため

ここまで発想できているのですからもう少しでできそうに思うのですが、難しかったでしょうか。検索しても細かいところまで同じ問題を探す方が大変で、むしろ自分でがんばって考えた方が早いと思います。

N = input().split() でリスト化するところまでできているのですから、そのリストの要素数分ループして出力すればよいです。以下のコード例は3つの方法で同じように出力します。最初はforを使って実直に出力した方が分かりやすいでしょうか。コード例の内、3つ目はmapを使って一挙に処理します。

Python3

1# 1行を単語ごとに切り出してwordsリストに 2words = input().split() 3 4# 1) for in で 5for word in words: 6 # 単語ごとに取り出して、単語の1文字目を改行無しで出力 7 print(word[0], end='') 8 9print() 10 11# 2) range()で 12for i in range(len(words)): 13 # 単語の1文字目を改行無しで出力 14 print(words[i][0], end='') 15 16print() 17 18# 3) wordsリストをmapで処理、joinで連結 19s = ''.join(list(map(lambda w:w[0], words))) 20print(s)

実行例として、以下の文を処理してみます。(著作権フリーの H.G.ウェルズのSF小説「宇宙戦争」第1章の冒頭の文です)

Plain

1No one would have believed in the last years of the nineteenth century that this world was being watched keenly and closely by intelligences greater than man's and yet as mortal as his own;

実行結果です。(同じ結果で3行出力されます)

sh

1$ python3 t01.py 2No one would have believed in the last years of the nineteenth century that this world was being watched keenly and closely by intelligences greater than man's and yet as mortal as his own; 3Nowhbitlyotncttwwbwkacbigtmayamaho 4Nowhbitlyotncttwwbwkacbigtmayamaho 5Nowhbitlyotncttwwbwkacbigtmayamaho 6$

コードは参考例ですので、1行のみ処理します。複数行の処理をしたいのであれば更にがんばってコードを書く必要があります。

投稿2020/04/08 05:53

dodox86

総合スコア9256

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Calamus

2020/04/08 16:36

for、range,mapを用いた別々の方法があることを知ることができました。ループ処理を使って単語を取り出すことが重要なのですね。私が調べただけではfor以外の方法を知ることができませんでした。とても分かりやすく回答をしていただき、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問