鯖と鯵を数える
Excelで、こんなクイズが出題された。
鯖と鯵は、それぞれ何匹?
今回は、Split関数を用いて解いてみた。
Function 何匹(全体 As String, 種類 As String) As Long 何匹 = UBound(Split(全体, 種類)) End Function
例えば「鯖鯵鯖」(←全体)という文字を、「鯵」(←種類)という文字で分割してみる。すると、
鯖鯵鯖 ⇒ 鯖,鯖
という風に二つに分割できる。分割された文字は配列(番号が振ってある箱のようなもの)にそれぞれ格納されるため、
- 0番目の箱「鯖」
- 1番目の箱「鯖」
のようなデータの持ち方をする。このとき注意すべきは、箱が「0」番から始まっていること。従って、箱に振られた番号の最大値(Ubound)がそのまま、鯵の匹数になる訳だ。
繰り返しになるが、「鯵」という文字で元の文字が何分割できるか?を利用して、「鯵」という文字の数を数えている。
これだけだと味気ないので、Pythonで同じことをやってみた。
def count_fish(source,fish): return len(source.split(fish))-1 source='鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵鯖鯵' for fish in ['鯖','鯵']: print(fish + ':' + str(count_fish(source,fish)) + ' 匹')
今回作成するにあたり学習したことは、以下の二つ。
- 関数の戻り値は、「return」で返す。
- 配列の要素数は、len関数で求める。
対比しながら学ぶと理解も早いし、結構面白いです。
参考まで。