IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

スーパーエンジニアの独り言

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第38回 はらぺこあおむし 2014年8月

 暑い日が続きますが食欲がまったく落ちません。いつの時代の児童なのかという程に毎日毎曜日美味しくご飯をいただけます。まるで「はらぺこあおむし」"The Very Hungry Caterpillar" です。

 毎日の食事を美味しく食せるのは生きる活力そのものであり、また健康で日々を過ごさせていただいていることに感謝すべきことに他ならないのです。ですがその反面、良いお年頃(結構な年齢)のため体重(腹囲)の増加が心配なのです。運動を滅多にしないのが原因ですが、加齢による基礎代謝機能の低下のため滋養を効率良く運動エネルギーに変換できず、飛び出たお腹を引っ込めることが出来ません。来月早々に健康診断を受けなければならない身にとってこれは大問題です。平成20年から特定健康診査としてメタボ健診(メタボリックシンドローム健康診断)が義務化されました。該当すると特定保健指導が行われる羽目になります。健康診断の際に居残りで食事の指導されるのです。これは宛も(あたかも)授業中に素行が悪い児童の様相を呈します。放課後、嫌いな給食を残したため一人きりの教室で完食するまで帰れない構図と表現するのがピッタリかもしれません。間違いなく、遠い昔の嫌な記憶を呼び覚ましてくれることとなるでしょう。

 このシチュエーションを避けるには自ら節制を促すため注意喚起を日々励行する必要があるようです。そこでメタボの一つの指標であるBMI(Body Mass Index, ボディマス指数)を毎日欠かさずチェックすることにしました。

 BMI値の算出は体重を身長の二乗で割るという簡単な計算式で求めることが出来ます。

 |  BMI = 体重(キログラム)÷(身長(メートル)の二乗)

 ではこのBMI値を求めるRubyプログラムを少しずつ順番に書いてみます。(プログラムのファイル名は、the_very_hungry_caterpillar.rb または、bmi.rb などとしておきます。)

はらぺこあおむし最初の試練:BMIを求める

例えば、身長1.6メートルで体重50キログラムの場合のBMI値を求めるには、

code. 01
  | puts( 50.0 / 1.6 ** 2 )            #=> 19.531249999999996

BMI値を計算できるようになりました。
身長をメートルではなくセンチメートルで計算できるようにしましょう。

code. 02
  | puts( 50.0 / (160.0/100.0) ** 2 )  #=> 19.531249999999996

これでオーケーです。更にちょっと手を加えましょう。
身長、体重が変わることを考えて計算式に代入できるように変数で書き換えます。

code. 03
  | height = 160.0
  | mass   = 50.0
  | bmi = ( mass / (height/100.0) ** 2 )
  | puts(bmi)                          #=> 19.531249999999996

最初の試練はクリアしました。

はらぺこあおむし第二の試練:少数第二位で丸める

 BMI値は、小数点以下桁数は第2位まで表示すれば十分なので丸めて表示します。
プログラムでの浮動小数点の扱いについては併せて(過去記事「第31回 浮雲」
を是非ご覧ください。

code. 04
  | height = 160.0
  | mass   = 50.0
  | bmi = ( mass / (height/100.0) ** 2 )
  | puts("%.2f" % bmi)                 #=> 19.53

 これでオーケーです。さぁ、次のステップへ進みましょう。

はらぺこあおむし第三の試練:身長と体重を入力する

 ここでプログラム実行時に身長と体重を入力できるようにします。

code. 05
  | print("身長(cm) : ")
  | height = gets.chomp.to_f()
  | print("体重(kg) : ")
  | mass = gets.chomp.to_f()
  | bmi = (mass / (height/100.0)**2)
  | puts( "BMI値    : %.2f" % bmi)
exec. 05
  | $ ruby the_very_hungry_caterpillar.rb
  | 身長(cm) : 160
  | 体重(kg) : 50
  | BMI値    : 19.53

これで毎日体重を計った後にBMI値をチェック出来るようになりました。
しかし身長は毎日伸び縮みする訳ではないため、省略も可能に(標準身長を設定)しておきましょう。

code. 06
  | print("身長(cm) : ")
  | height = gets.chomp.to_f()
  | height = 160.0 if height == 0.0
  | print("体重(kg) : ")
  | mass = gets.chomp.to_f()
  | bmi = (mass / (height/100.0)**2)
  | puts("BMI値:%.2f" % bmi)

これで"Enter"キーを押すだけで済みます。
自分の身長をいちいち入力しなくて良くなりましたので、毎日チェックするのに楽になりましたね。
では、最後の試練に進みましょう。

はらぺこあおむし最後の試練:BMI値を判定する

下記のテーブルを参考にしてBMI値から肥満度の判定を行います。

Table 1: Body Mass Index (BMI) Classification
  | Classification      | BMI(kg/m2)
  | --------------------+---------------
  | Severe thinness     |  <16.00
  | Moderate thinness   |  16.00 - 16.99
  | Mild thinness       |  17.00 - 18.49
  | --------------------+---------------
  | Normal range        |  18.50 - 24.99
  | --------------------+---------------
  | Pre-obese           |  25.00 - 29.99
  | --------------------+---------------
  | Obese class I       |  30.00 - 34.99
  | Obese class II      |  35.00 - 39.99
  | Obese class III     |         >40.00
  | --------------------+--------------

 (Source: Adapted from WHO, 1995, WHO, 2000 and WHO 2004.)

では、「はらぺこあおむし」らしく判定を表示することにしましょう。

code. 07
  | print("身長(cm) : ")
  | height = gets.chomp.to_f()
  | height = 160.0 if height == 0.0
  | print("体重(kg) : ")
  | mass = gets.chomp.to_f()
  | bmi = (mass / (height/100.0)**2)
  | puts( "BMI値    : %.2f" % bmi)
  | 
  | the_day_of_week = ["日曜日", "月曜日", "火曜日", "水曜日", 
  |                    "木曜日", "金曜日", "土曜日", "次の日曜日"]
  | 
  | if bmi < 16
  |   index = 0
  | elsif bmi < 17
  |   index = 1
  | elsif bmi < 18.5
  |   index = 2
  | elsif bmi < 25
  |   index = 3
  | elsif bmi < 30
  |   index = 4
  | elsif bmi < 35
  |   index = 5
  | elsif bmi < 40
  |   index = 6
  | else
  |   index = 7
  | end
  | puts("あなたは、「#{the_day_of_week[index]}のはらぺこあおむし」さんです。")
exec. 07
  | $ ruby the_very_hungry_caterpillar.rb
  | 身長(cm) : 160
  | 体重(kg) : 50
  | BMI値    : 19.53
  | あなたは、「水曜日のはらぺこあおむし」さんです。

 最終関門を突破して、はらぺこあおむし(BMI値判定)プログラムの完成です。
最近の体重計は身長を事前に設定しておけばBMI値も計算してくれますが、お持ちでない方はこのプログラムで毎日BMI値をチェックしていただくと宜しいと思います。毎日のチェックが大事です。もし結果が「土曜日のはらぺこあおむし」と表示されたのなら少し節制が必要かもしれません。

 そういえば絵本でも「はらぺこあおむし」は「土曜日の夜」には食べ過ぎでお腹が痛くなってしまい、「次の日曜日」には「みどりのはっぱ」を食べてお腹の調子を整えていました。筆者も健康診断前には野菜を食したいと思います。お腹がパンパンに膨れ上がっていますので。

 今回題材にさせていただいたエリック・カール(Eric Carle)作の絵本「はらぺこあおむし」"The Very Hungry Caterpillar" は、とても有名な作品で30ヶ国以上に亘り翻訳出版されているのだそうですが、幼い時に読んだことはありませんでした。大人になって今更ながらにこの綺麗な絵本に魅せられた次第であります。

 筆者の記憶が混濁していなければという前提ですが、少年時代に読んだ漫画雑誌の中に手塚治虫の読み切りの短編がありました。この短編の題材は主人公グレーゴル・ザムザ (Gregor Samsa)が登場するフランツ・カフカ (Franz Kafka)の代表作「変身」"The Metamorphosis" (原題独語:"Die Verwandlung") をモチーフにした漫画だったはずですが、原作とは世界観とストーリーが異なり強烈だったラストシーンが脳裏に残像として焼き付いてしまいました。記憶の宮殿(過去記事「第35回 忘却の空」)の片隅にあったのは、芋虫にされたザムザが(蜂のように毒針を備えた)凛々しい成虫になって夜の帳が下りた暗闇へと静かに羽ばたいていくショット(画像)です。手塚治虫の短編が「はらぺこあおむし」と似た趣向であるというつもりは毛頭ないのですが、頭の中では二つのラストシーンがシンボリック・リンクしてしまいました。二つの物語は共に再生或いは転生への渇望と希求の成就が等しく感じられたからです。

 「はらぺこあおむし」のラストページには、「さなぎ」になって何日も眠りについたのちに空高く宙を舞える極彩色の羽を纏った綺麗な蝶となっている姿が描かれています。楽しい話は勿論ですが、悲しい話、辛い話の御仕舞いには一縷(いちる)の望みがあるものが好ましいものです。

 次回もお楽しみに。

 


 

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes