言語処理100本ノック 2015の挑戦記録です。環境はUbuntu 16.04 LTS + Python 3.5.2 :: Anaconda 4.1.1 (64-bit)です。過去のノックの一覧はこちらからどうぞ。
第1章: 準備運動
###03.円周率
"Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics."という文を単語に分解し,各単語の(アルファベットの)文字数を先頭から出現順に並べたリストを作成せよ.
出来上がったコード:
# coding: utf-8
target = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
result = []
words = target.split(' ')
for word in words:
result.append(len(word) - word.count(',') - word.count('.'))
print(result)
実行結果:
[3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9, 7, 9]
,
と.
の扱いがあんまり良くない感じがしています。str.split()
がデリミタ文字列を複数指定できるときれいでいいのですが。
(2016/09/11追記)
shiracamusさんよりアドバイス頂きました。ありがとうございます!
問題が「アルファベットの文字」なので、アルファベットのみカウントするようにしてみました。
# coding: utf-8
target = 'Now I need a drink, alcoholic of course, after the heavy lectures involving quantum mechanics.'
result = []
words = target.split(' ')
for word in words:
count = 0
for char in word:
if char.isalpha():
count += 1
result.append(count)
print(result)
先輩方のコードを拝見すると、内包表記を使うことでもっと効率的に書けそうです。ただ、不慣れでパッと見では理解しにくいので、慣れるまでは冗長なままでいこうかと思います^^;
4本目のノックは以上です。誤りなどありましたら、ご指摘いただけますと幸いです。