Pythonで文字列をモールス信号に変換する際の重複文字処理と改善方法

プログラミング

Python初心者が文字列をモールス信号に変換するプログラムを作成する際、同じ文字が複数含まれると固まる問題はよくあります。これは元のコードでリスト操作やインデックス管理が正しく行われていないことが原因です。この記事では、問題点の解説と、簡潔で正確に動作するモールス信号変換プログラムを紹介します。

問題点の整理

元のコードでは、同じ文字が複数含まれる場合にwhileループでインデックスを追加しようとしていますが、list_input[k] == ‘???’ の部分は代入ではなく比較になっており、無限ループが発生します。また、list_indexとlist_outputの対応が複雑で、重複処理が正しく機能していません。

簡単で確実な方法

Pythonでは文字列と辞書を使うと重複も含めて正しく変換できます。アルファベットをキー、モールス信号を値とする辞書を作成し、入力リストを順に参照して対応するモールス信号を出力します。

例。

morse_dict = {"a":"*#", "b":"#***", "c":"#*#*", "d":"#**", "e":"*", "f":"**#*", "g":"##*", "h":"****", "i":"**", "j":"*###", "k":"#*#", "l":"*#**", "m":"##", "n":"#*", "o":"###", "p":"*##*", "q":"##*#", "r":"*#*", "s":"***", "t":"#", "u":"**#", "v":"***#", "w":"*##", "x":"#**#", "y":"#*##", "z":"##**"}
inputkey = input("アルファベットを1文字ごとに,で入力してください:")
list_input = inputkey.split(',')
list_output = [morse_dict[char] for char in list_input]
print(list_output)

ポイントと注意点

辞書を使うことで、同じ文字が複数あっても正しくモールス信号に変換されます。また、入力リストをそのままループ処理することでインデックス管理の複雑さを回避できます。

大文字と小文字の混在に対応する場合は、list_input = inputkey.lower().split(‘,’) のように変換してから辞書参照すると安全です。

まとめ

モールス信号変換プログラムで同じ文字を含む場合の固まり問題は、代入ミスやインデックス管理の複雑さが原因です。辞書とリスト内包表記を使うことで、簡潔に重複も含めて正しく変換できます。これにより、s,o,sのような入力も問題なく処理できます。

コメント

タイトルとURLをコピーしました