python 言語処理100本ノック -第1章: 準備運動- 04. 元素記号

設問

“Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.”という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,それ以外の単語は先頭に2文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

今回のポイントはディクショナリ形式とenumerate関数です。
ディクショナリ形式はkey-valueの関係データを保持する形式です。
{}で囲むことでディクショナリ形式を表現しています。

例)

{key1:value1,key2:value2,key3:value3}

もう1つはenumerate関数ですが、こちらはfor文において対象のリストに対してインデックスを付与することができます。10行目のfor文はtmp(配列)の要素を順番に読み込みながら(el)、インデックス番号(i)を付与しています。

target = u'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can.'
top = [1, 5, 6, 7, 8, 9, 15, 16, 19]

tmp = target.split(' ')
#ディクショナリ形式(key,value)
result = {}
for i, el in enumerate(tmp):
	if (i+1) in top: 
		result[el[0:1]] = i
	else:
		result[el[0:2]] = i
print(result)

実行結果

{'H': 0, 'He': 1, 'Li': 2, 'Be': 3, 'B': 4, 'C': 5, 'N': 6, 'O': 7, 'F': 8, 'Ne': 9, 'Na': 10, 'Mi': 11, 'Al': 12, 'Si': 13, 'P': 14, 'S': 15, 'Cl': 16, 'Ar': 17, 'K': 18, 'Ca': 19}

開発環境

Windows10
Python 3.7.3
Visual Studio Code 1.33.1

言語処理100本ノック 公式

言語処理100本ノック 2015