TIL

Today I Learned. 知ったこと、学んだことを書いていく

04. 元素記号

言語処理100本ノック 2015の5つ目。

"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文字を取り出し,取り出した文字列から単語の位置(先頭から何番目の単語か)への連想配列(辞書型もしくはマップ型)を作成せよ.

#!/usr/bin/env python

s = 'Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might ' \
    'Also Sign Peace Security Clause. Arthur King Can.'

result = {}

# enumerate()でループの回数を取得する
for i, elem in enumerate(s.split(), start=1):
    # 指定番号かどうか
    if {i} & {1, 5, 6, 7, 8, 9, 15, 16, 19}:
        result[elem[0]] = i
    else:
        result[elem[0:2]] = i

# 結果出力
for items in result.items():
    print(items)

実行結果

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

ポイント

  • enumerate()関数で繰り返しの番号を取得。start引数で開始を1からに設定。
  • 集合演算の&を使って、何番目か確認。



言語処理100本ノック 2015