言語処理100本ノック 2020 第1章 前半
新型コロナウィルスの流行で外出できるわけでもないので、
暇つぶしと勉強兼ねて遊んでみることにした。
競技プログラミングだと絶対使わないようなものも出てくるので、
ちょうどいいかもしれない。
今回は第1章 準備運動の前半(00-04まで)解説を書きます
目次
00. 文字列の逆順
ABC−A問題でよく見るようなやつだ。
スライスを使って、word[::-1]
と書くと逆順に出力できる。
解答
# coding:utf-8 s = "stressed" print(s[::-1])
01. 「パタトクカシーー」
これもABC−A問題っぽい。必要な部分をさっと切り出して+
で結合。
解答
# coding:utf-8 s = "パタトクカシーー" print(s[0] + s[2] + s[4] + s[6])
02. 「パトカー」+「タクシー」=「パタトクカシーー」
文字列が増えた。文字列の追記+結合が+=
でも行けることを地味に知った。
ポイント
文字列の追記は+=でできる
解答
# coding:utf-8 s1 = "パトカー" s2 = "タクシー" ans = "" for i in range(len(s1)): ans += s1[i] + s2[i] print(ans)
03. 円周率
まずスペースで文章を区切る。この時AtCoderでよく使うsplit()
が使えるので使う。
このままだとピリオドやカンマが入って邪魔なので、count()
を使って数えてその分を除外する。
解答
# coding:utf-8 s = "Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics." word = s.split() ans = [] for item in word: ans.append(len(item) - item.count(',') - item.count('.')) print(ans)
04. 元素記号
元素記号の覚え方英語版ってこうなのかー、と思いつつ...
単語の順番によって何文字目まで切り出すか違うので、場合分けをする。
単語と単語の位置を別のリスト(keys, values)で持っておき、
最後にdict(zip(keys, values))
で一気に辞書を生成する
ポイント
2つのリストから辞書を生成する時、dict(zip(keys, values))で生成できる
解答
# coding:utf-8 s = "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can." word = s.split() keys = [] values = [] n = len(word) for i in range(n): tmp = word[i] if i == 0 or 4 <= i <= 8 or i == 14 or i == 15 or i == 18: keys.append(tmp[0]) values.append(i + 1) else: keys.append(tmp[0:2]) values.append(i + 1) ans = dict(zip(keys, values)) print(ans)