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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

18136閲覧

単語間にスペースを入れたい

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/11 09:13

前提・実現したいこと

CheckioというサイトでMorse Decoderという問題を解いています。
問題文
(Your task is to decrypt the secret message using the Morse code.
The message will consist of words with 3 spaces between them and 1 space between each letter of each word.
If the decrypted text starts with a letter then you'll have to print this letter in uppercase. )
モールス信号を文字列にして出力するというものなのですが、単語間にスペースを入れることが出来ません。

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

"... --- -- . - . -..- -" Your result "Sometext" Right result "Some text"

該当のソースコード

Python

1MORSE = {'.-': 'a', '-...': 'b', '-.-.': 'c', 2 '-..': 'd', '.': 'e', '..-.': 'f', 3 '--.': 'g', '....': 'h', '..': 'i', 4 '.---': 'j', '-.-': 'k', '.-..': 'l', 5 '--': 'm', '-.': 'n', '---': 'o', 6 '.--.': 'p', '--.-': 'q', '.-.': 'r', 7 '...': 's', '-': 't', '..-': 'u', 8 '...-': 'v', '.--': 'w', '-..-': 'x', 9 '-.--': 'y', '--..': 'z', '-----': '0', 10 '.----': '1', '..---': '2', '...--': '3', 11 '....-': '4', '.....': '5', '-....': '6', 12 '--...': '7', '---..': '8', '----.': '9' 13 } 14 15def morse_decoder(code): 16 #replace this for solution 17 result = "" 18 words = code.split(" ") 19 moji = code.split(" ") 20 for morse in moji: 21 if morse in moji: 22 result += MORSE.get(morse, str(morse)) 23 if len(result) == 1: 24 result = result.upper() 25 return result 26 27 28if __name__ == '__main__': 29 print("Example:") 30 print(morse_decoder('... --- ...')) 31 32 #These "asserts" using only for self-checking and not necessary for auto-testing 33 assert morse_decoder("... --- -- . - . -..- -") == "Some text" 34 assert morse_decoder("..--- ----- .---- ---..") == "2018" 35 assert morse_decoder(".. - .-- .- ... .- --. --- --- -.. -.. .- -.--") == "It was a good day" 36 print("Coding complete? Click 'Check' to earn cool rewards!")

試したこと

単語ごとに分けた後、文字ごとに分け変換し足すという方法ならできると思ったのですが、うまく表現することが出来ません。
"... --- -- . - . -..- -" → ("... --- -- .", "- . -..- -")
→ (("...", "---", "--", "."), ("-", ".", "-..-", "-"))
→ ("s", "o", "m", "e"), ("t", "e", "x", "t")
→ 一単語の文字数とresultに入った文字数が同じであればスペースを入れる
といった感じで考えていました。

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

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

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

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

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

guest

回答2

0

ベストアンサー

最小限の修正で済みそうな方法なら。

Python

1>>> s = '... --- -- . - . -..- -' 2>>> s = s.replace(' ', ' | ') 3>>> s.split() 4['...', '---', '--', '.', '|', '-', '.', '-..-', '-']

そして、MORSE.getの第二引数は' 'にしておけば良いです。

書いてみた

私ならこんなコードを書くかもです。

Python

1def morse_decoder(code): 2 return ' '.join( 3 ''.join( 4 MORSE[ch] for ch in word.split() 5 ) 6 for word in code.split(' ') 7 ).capitalize()

投稿2018/09/11 09:42

編集2018/09/11 09:45
LouiS0616

総合スコア35658

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

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

退会済みユーザー

退会済みユーザー

2018/09/11 10:05

回答ありがとうございます。 わかりやすかったためベストアンサーにさせていただきました! 比べることが失礼だと思いますがやはり初心者の書くコードとは違い、きれいでわかりやすいですね。
LouiS0616

2018/09/11 10:10

str.join と str.capitalize が使えそうだなぁと思ったので。 書いているうちに引き出しが増えてくるので、いろいろな解法を思いつくようになります。
退会済みユーザー

退会済みユーザー

2018/09/11 10:21

まだPythonの勉強初めて間もないのでこれから日々勉強して納得のできるコードを書けるように頑張ります。 ありがとうございました!
guest

0

めんどいので、スペースに該当する半角スペース3つを先に適当な記号に置換しましょう。

python

1MORSE = {'.-': 'a', '-...': 'b', '-.-.': 'c', 2 '-..': 'd', '.': 'e', '..-.': 'f', 3 '--.': 'g', '....': 'h', '..': 'i', 4 '.---': 'j', '-.-': 'k', '.-..': 'l', 5 '--': 'm', '-.': 'n', '---': 'o', 6 '.--.': 'p', '--.-': 'q', '.-.': 'r', 7 '...': 's', '-': 't', '..-': 'u', 8 '...-': 'v', '.--': 'w', '-..-': 'x', 9 '-.--': 'y', '--..': 'z', '-----': '0', 10 '.----': '1', '..---': '2', '...--': '3', 11 '....-': '4', '.....': '5', '-....': '6', 12 '--...': '7', '---..': '8', '----.': '9', 13 'SPACE': ' ' 14 } 15 16def morse_decoder(code): 17 #replace this for solution 18 lst = [] 19 for word in code.replace(" ", " SPACE ").split(): 20 lst.append(MORSE[word]) 21 lst[0] = lst[0].upper() 22 return "".join(lst) 23

投稿2018/09/11 09:46

編集2018/09/11 09:53
hayataka2049

総合スコア30933

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

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

退会済みユーザー

退会済みユーザー

2018/09/11 10:03

回答ありがとうございます。 ディクショナリを書き換えることは出来ませんでした。 おそらくそこは固定でということだと思っています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問