Python学習日記 – BMI計算
はじめに
あけましておめでとうございます!春節の休みも終わりに近づき、みんなの生活も徐々に日常に戻ってきました。この間ずっと暇で、親戚の家にもあまり行かなかったので、ずっと書きたいと思っていたBMI計算のプログラムを書いてみました。
BMIとは
ボディマス指数(Body Mass Index)は、BMI指数とも呼ばれ、国際的に広く使われている、人の肥満度や健康状態を測る基準です。
計算式:BMI = 体重 ÷ 身長²(体重の単位:キログラム、身長の単位:メートル)
BMIは19世紀中頃にベルギーの万能学者ケトレーが最初に提唱しました。
百度百科より引用
BMIの基準は国によって異なります。国際標準(International Normal Standard)は20〜25ですが、今回は中国標準(PRC Standard)を採用しました。中国標準の正常範囲(PRC Normal Standard)は18.5〜23.9です。
出力プレビュー
※ # が付いている部分は私の説明で、実際の実行時には表示されません
Hello!Nice to meet you what's your name?
Magneto # 私が入力した値
Ok!Magneto. Let's calculate your BMI and classification(adult)
Enter your weight(kg)
42 # 私が入力した値
Enter your height(m)
1.65 # 私が入力した値
Hi Magneto!Your BMI number is 15.426997245179065
Oh!Magneto!You're underweight and BMI is below standerd.
The norm come from PRC
Press Enter to exit
全コード
############################
### Date 2022 January 24 ###
### Author Magneto ###
### Name BMI計算 <——>
### Facility iPad ###
### Language Python ###
############################
#歓迎画面
print("Hello!Nice to meet you what's your name?") # 文字列
the_name = input()
print(f"\nOk!{the_name}. Let's calculate your BMI and classification(adult)") # 文字列
#入力値
print("\nEnter your weight(kg)")
weight = input()
print("\nEnter your height(m)")
height = input()
#変換値
your_weight = float(weight)
your_height = float(height)
#計算
number = your_weight/(your_height*your_height)
the_number = float(number)
#数値の取得
print(f"\nHi {the_name}!Your BMI number is {the_number} \n") # 文字列
#分析
if the_number < 18.5:
print(f"Oh!{the_name}!You're underweight and BMI is below standerd.")
elif 18.5 <= the_number <= 23.9:
print(f"{the_name},your BMI is normal.")
elif 23.9 < the_number <= 27.9:
print(f"{the_name},you're overweight and BMI is higher than the standard.")
elif 27.9 < the_number <= 32:
print(f"{the_name},you're too fat and BMI well above the mark")
else:
print(f"{the_name},you're severely exeed the limit please lose weight")
print("\nThe norm come from PRC")
x = input('Press Enter to exit')
コード分析
分析について
コード分析では、各行のコードがどのような型を使っているのか、その用途や使い方について詳しく説明します。行数にはコメントの行も含まれています。
コメント
Pythonでは、コメントは シャープ記号(#)で表します。シャープ以降の内容はPythonインタプリタに無視されます。このプログラムでは、1〜8行目、12行目、17行目、23行目、25行目がすべてコメントです。
例 #1
#歓迎画面
print("Hello!Nice to meet you what's your name?")
Pythonインタプリタは1行目を無視し、2行目のみを実行します。
Hello!Nice to meet you what's your name?
コメントの役割とは?
コメントを書く主な目的は、コードが何をするのか、どのようにするのかを説明することです。開発中は各部分がどう連携しているかをよく理解していても、しばらくすると細部を忘れてしまうことがあります。もちろん、コードを調べれば各部分の仕組みを理解することはできますが、コメントを書くことで、明確な自然言語でこのコードの概要を説明でき、後でこのコードを書くときに多くの時間を節約できます。
現在、ほとんどのソフトウェアは共同で開発されており、開発者は同じ会社の複数の従業員であることも、同じオープンソースプロジェクトの開発者であることもあります。共同作業をスムーズにするために、コメントは不可欠です。そのため、最初からプログラムにコメントを書くことをお勧めします。
ユーザー入力
ほとんどのプログラムはエンドユーザーの問題を解決するために作られており、そのためにはユーザーから何らかの情報を得る必要があります。したがって、ユーザー入力は非常に重要です。Pythonでは、input() 関数を使うことで効果的に解決できます。このプログラムでは、10行目、14行目、16行目、37行目でこの関数を使用しています。
例 #1
# 基本的な input() の使い方
Message = input(“Hello World”)
print(Message)
このコードを実行すると、以下のように表示されます。
Hello World
実行後、プログラムはユーザーの入力を待ち、ユーザーがEnterキーを押すと実行を続けます。入力された値は変数 Message に代入され、次の print (Message) で入力された内容がユーザーに表示されます:
Hello WorldImMagneto
ImMagneto
実際のプログラムでは、上記のような方法ではなく、より明確な方法を使うことがほとんどです。その方法では、ユーザーにどのような情報を提供してほしいのかを正確に示すことができます。
例 #2
name = input(“Please enter your name:”)
print(f”\nHello {name}!”)
実行して対話すると、次のようになります:
Please enter your name:Magneto
Hello Magneto!
このプログラムでは、文をより明確にするために、分離した書き方を採用しました。
例 #3
print("Hello!Nice to meet you what's your name?")
the_name = input()
print(f"\nOk!{the_name}. Let's calculate your BMI and classification(adult)")
print() と input() を分けることで、コードがより明確で見やすくなります。
Hello!Nice to meet you what's your name?
Magneto
Ok!Magneto. Let's calculate your BMI and classification(adult)
ユーザー向けの表示内容に変わりはありませんが、これは大規模プロジェクトの開発において良い書き方です。このような書き方をすることで、バグの発生を効果的に減らすことができ、ユーザーが入力した内容を指定した場所でのみ呼び出すことができます。
整数と文字列を浮動小数点数に変換する
必要な計算と表示を行うために、整数と文字列を浮動小数点数に変換する必要があります。そのためには、float() 関数を使います。
float() メソッドの構文
class float([x])
ここで x は整数または文字列を表し、実行後は浮動小数点数が返されます。
例 #1
>>>float(1)
1.0
>>> float(112)
112.0
>>> float(-123.6)
-123.6
>>> float('123') # 文字列
123.0
このプログラムでは、浮動小数点数を計算する必要があり、明確な書き方に従うために、分離した書き方を採用しています。
例 #2
#計算
number = 51.2/(1.6*1.6)
the_number = float(number)
#数値の取得
print(f"Your BMI number is {the_number}")
最終的な出力は次のようになります。
Your BMI number is 20.351562499999996
浮動小数点数は、無限小数になった場合、丸め処理が行われます。
ユーザーが入力した値も直接計算することはできず、浮動小数点数に変換してから計算する必要があります。幸いなことに、ユーザーが入力する値は整数や文字列なので、float() 関数を使って変換することができます。
例 #3
#入力値
print("\nEnter your weight(kg)")
weight = input()
print("\nEnter your height(m)")
height = input()
#変換値
your_weight = float(weight)
your_height = float(height)
#計算
number = your_weight/(your_height*your_height)
the_number = float(number)
#数値の取得
print(f"\nYour BMI number is {the_number}")
実行後は次のようになります:
Enter your weight(kg)
51.2
Enter your height(m)
1.6
Your BMI number is 20.351562499999996
if-elif-else 文
2つ以上の異なる条件をチェックする必要がある場合、if-elif-else 構造を使用できます。これは各条件テストを順番にチェックし、条件を満たすまで続けます。テストに合格すると、その後のコードが実行され、残りの if-elif-else 文のコードはスキップされます。説明しやすいように、直接例を挙げるのが使い方を説明するよりも効果的です。
例 #1 必要な要件:
BMI値が18.5未満の人には、標準値より低いことを伝える
BMI値が18.5以上23.9以下の人には、標準値に達していることを伝える
BMI値が23.9を超え27.9以下の人には、標準値を超えていることを伝える
数学の区間の考え方を使うと、これらの値の範囲は (-∞,27.9] であり、この範囲外のすべての値は標準値を大幅に超えているため、その旨を伝える必要があります。
これらの要件に基づいて、必要な if-elif-else 文は次のようになります:
#分析
if the_number < 18.5:
print(f"You're underweight and BMI is below standerd.")
elif 18.5 <= the_number <= 23.9:
print(f"Your BMI is normal.")
elif 23.9 < the_number <= 27.9:
print(f"You're overweight and BMI is higher than the standard.")
elif 27.9 < the_number <= 32:
print(f"You're too fat and BMI well above the mark")
else:
print(f"You're severely exeed the limit please lose weight")
前述の if-elif は (-∞,27.9] の範囲内のすべての数値を含んでいるため、else は (27.9,+∞)、つまり標準値を大幅に超えた部分のみを含みます。
次に、値が20の場合を仮定しましょう。
the_number = 20
if the_number < 18.5:
print(f"You're underweight and BMI is below standerd.")
elif 18.5 <= the_number <= 23.9:
print(f"Your BMI is normal.")
elif 23.9 < the_number <= 27.9:
print(f"You're overweight and BMI is higher than the standard.")
elif 27.9 < the_number <= 32:
print(f"You're too fat and BMI well above the mark")
else:
print(f"You're severely exeed the limit please lose weight")
すると、次のような結果が得られます:
Your BMI is normal.
if-elif-else 文とPythonの特性により、この部分の内容は自然言語に非常に近いものになっています。そのため、翻訳の方法が非常に適しており、具体的な翻訳はここでは示しません。
おわりに
1年前、私は多くの友人たちと、あのすごい人たちのことを話し合いました。彼らはわずか数行のコードで、他の人が何百行もかけてやることを成し遂げてしまう。それは非常に強力なことです。皆さんも、そのようなすごい人になるためには、十分な蓄積が必要です。私はそういう人々の存在を否定しませんし、彼らの強さも否定しません。しかし、私の認識では、本当に優れたプログラミング能力とは、自分が書いた内容を明確に示すことができ、この部分が何をするのか、あの部分が何をするのかを、明確かつ簡潔に皆に伝えることができることであり、一筆書きのように一気に書くことではありません。そうしてこそプログラミングの意味があるのです。もちろん、適度に短縮することで自分の意図をより良く表現することもできます。それは自然言語の中国語における成語のようなものです。今回のテーマを「未来を見据えたBMI計算」と名付けたのも、まさにこのためです。未来のプログラミングにおいても、明確なコードだけが求められるでしょう。そのために、私はコードを分析する際、終始規範的で明確な書き方を心がけました。これは、未来を見据えてのことです!