[Medical AI with Python: P4] Pythonで学ぶプログラミング思考 ― if文とループで処理を自動化

プログラムに「知性」と「勤勉さ」を

プログラムは通常、上から下へ進むだけです。しかし「if文」で条件に応じて判断し、「forループ」で面倒な作業を繰り返すことで、賢く勤勉なアシスタントに進化します。この二つの制御構文は、プログラミング的思考の核となる重要な概念です。

if文 (条件分岐)
プログラムに「判断力」を与える

「もし〜なら〜する」という条件に基づき、処理の流れを変えます。比較演算子(>, ==)や論理演算子(and, or)を使い、elif/elseと組み合わせることで複雑な判断が可能です。

forループ (繰り返し)
プログラムに「勤勉さ」を与える

リストなどのデータ集合から要素を一つずつ順番に取り出し、同じ処理を自動で繰り返します。多数のデータに対する退屈な反復作業をコンピュータに任せることができます。

プログラムを進化させる2つの力 単なる命令の羅列から、賢く勤勉なアシスタントへ if文 (条件分岐) 「判断力」を与える 「もし○○なら、△△する」という 医師の思考プロセスをコード化 条件式 False elseの処理 True ifの処理 例: 血圧が140以上なら 「高リスク」と判定 for文 (ループ) 「勤勉さ」を与える データの集まりから一つずつ取り出し 同じ処理を自動で繰り返す 患者リスト 一つ取り出す 各患者に同じ処理 次の要素へ… 例: 100人分のデータに 血圧チェックを実行 + プログラミング的思考の核心 「判断」と「繰り返し」を組み合わせ、 複雑な問題を解決する力が身につく。 次のステップ 処理を部品化し再利用する「関数」へ
この講義で身につける「判断力」と「勤勉さ」
  • if文を使い、特定の条件に応じて処理を分岐させる「判断力」を身につける。
  • for文を使い、面倒な繰り返し作業を自動化する「勤勉さ」を身につける。
  • 辞書のリストのような複合的なデータ構造に対し、条件分岐とループを組み合わせて実践的な処理ができるようになる。
前提となるPythonの知識
  • 💡
    リストや辞書といった基本的なデータ構造の理解。
    本講義では、これらのデータ構造から要素を一つずつ取り出して処理します。
  • 💡
    変数にデータを代入し、print()で表示できること。
    条件式の結果やループの各ステップでの状態を確認するために重要です。
  • 💡
    複数のデータを手作業で処理することの大変さの認識(あれば尚良し)。
    制御構文がもたらす「自動化」の価値をより深く実感できます。
目次

はじめに:プログラムに「知性」と「勤勉さ」を

皆さん、こんにちは。前回の講義では、リストや辞書といった「データの入れ物」を学び、複数のデータを上手に整理する方法を身につけましたね。これで、たくさんの患者さんのデータをプログラムで扱えるようになりました。

しかし、今のままでは、私たちのプログラムは書かれたコードを上から下へ、一本道をただ愚直に進むことしかできません。これでは、まだ賢いアシスタントとは言えませんよね。

例えば、「血圧が140以上の患者さんだけをリストアップする」といった条件に応じた判断や、「100人分の患者データそれぞれに対して、BMIを計算する」といった退屈な繰り返し作業をどうすればいいのでしょうか?

ここで登場するのが、プログラムの流れを自在に操るための制御構文 (Control Flow) です。これらを使いこなすことで、私たちのプログラムは、単なる命令の羅列から、状況に応じて判断し、面倒な作業を自動でこなしてくれる、賢く勤勉なアシスタントへと進化します。

今回は、その中でも特に重要な「条件分岐」を行うif文と、「繰り返し」を行うforループについて学びます。この二つをマスターすることは、まさに「プログラミング的に物事を考える力」そのものを身につけることなのです。

1. 条件分岐 (if文) – プログラムに「判断力」を与える

プログラミングにおける最も基本的な「知性」は、ある条件が満たされているかどうかに基づいて、次に行うべき行動を変える、という判断力です。これを実現するのがif文です。

1.1 if文の考え方と構造

これは、医師が患者さんを診察するときの思考プロセスとそっくりです。

もし (if)、体温が37.5度以上なら、発熱と判断し、解熱薬の処方を検討する」
そうでなく、もし (elif)、咳がひどい場合は、呼吸器系の検査を推奨する」
どちらでもなければ (else)、経過観察とする」

といった具合に、条件に応じて異なるアクションを取りますよね。if文は、まさにこの思考の流れをコードで表現するものです。

Pythonでの基本的な書き方は以下の通りです。


if 条件式1:
    # 条件式1がTrueのときに実行される処理
elif 条件式2:
    # 条件式1がFalseで、かつ条件式2がTrueのときに実行される処理
else:
    # 全ての条件式がFalseのときに実行される処理

重要なポイント:

  • 条件式の後には必ずコロン : を書きます。
  • コロンの後の行は、インデント(字下げ、通常は半角スペース4つ)を付けます。このインデントされた部分が、その条件に属する処理ブロックであることを示します。Pythonでは、このインデントが文法として非常に重要です。
  • elif(else ifの略)や else は任意で、必要に応じて使います。

1.2 条件を作るための「比較演算子」と「論理演算子」

if文の条件式を作るために、いくつかの便利な道具があります。

よく使う演算子の表

種類演算子意味使用例
比較演算子==等しいage == 65
!=等しくないdepartment != "外科"
>より大きいblood_pressure > 140
<より小さいbmi < 18.5
>=以上age >= 75
<=以下ldl_cholesterol <= 120
論理演算子andかつage > 60 and is_smoker
orまたはhas_fever or has_cough
notではないnot has_allergy

特に、=(代入)と==(等しいかどうかの比較)の違いは、初心者がつまずきやすいポイントなので、しっかり区別しましょう。

Pythonコード例:患者のリスク判定

それでは、患者さんのデータに基づいて、簡単なリスク判定を行うプログラムを書いてみましょう。


# --- 1. ある患者さんのデータを変数として用意 ---
age = 70
systolic_bp = 155 # 収縮期血圧
has_diabetes = True # 糖尿病の既往歴

print(f"--- 患者データ ---")
print(f"年齢: {age}歳, 収縮期血圧: {systolic_bp}, 糖尿病既往: {has_diabetes}")
print("--- リスク判定開始 ---")

# --- 2. if-elif-else文でリスクを判定 ---
# まず、最も優先度の高い条件をif文で書きます。
# 年齢が65歳以上「かつ」糖尿病の既往があるか?
if age >= 65 and has_diabetes:
    # 上の条件がTrueの場合、このブロックが実行されます。
    risk_level = "高リスク"
    recommendation = "専門医との定期的な相談を強く推奨します。"
# 上のif文の条件がFalseだった場合に、次の条件を評価します。
# 収縮期血圧が140以上か?
elif systolic_bp >= 140:
    # このブロックが実行されるのは、age<65 または has_diabetes=False で、
    # 「かつ」systolic_bp>=140 の場合です。
    risk_level = "中リスク"
    recommendation = "血圧管理と生活習慣の見直しが必要です。"
# 上のどの条件にも当てはまらなかった場合に、このブロックが実行されます。
else:
    risk_level = "低リスク"
    recommendation = "良好な状態です。引き続き健康維持に努めてください。"

# --- 3. 判定結果の表示 ---
print(f"判定結果: {risk_level}")
print(f"推奨事項: {recommendation}")

# === ここから下が上記のprint文による実際の出力 ===
# --- 患者データ ---
# 年齢: 70歳, 収縮期血圧: 155, 糖尿病既往: True
# --- リスク判定開始 ---
# 判定結果: 高リスク
# 推奨事項: 専門医との定期的な相談を強く推奨します。

2. ループ (`for`文) – プログラムに「勤勉さ」を与える

次に、面倒な繰り返し作業をコンピュータに丸投げするための、魔法のような仕組み、ループについて学びます。その中でも、特に使用頻度が高いのがfor文です。

2.1 for文の考え方と構造

もし、100人分の患者データそれぞれに対して、BMIを計算し、リスク判定を行いたい、と考えたらどうしますか? 100回同じようなコードをコピー&ペーストするのは、非現実的で、間違いの元ですよね。

for文は、リストやタプルのような「複数の要素の集まり(イテラブルと言います)」から、要素を一つずつ順番に取り出して、要素の数だけ同じ処理を自動で繰り返すための構文です。


for 取り出した要素を入れる変数 in データの集まり:
    # このブロック内の処理が、要素の数だけ繰り返される
    # 「取り出した要素を入れる変数」を使って、各要素に対する処理を記述

if文と同じく、コロン:とインデントが重要です。

Pythonコード例:複数患者のデータ処理

前回の講義で学んだ、リストと辞書を組み合わせて、複数の患者さんデータを一度に処理してみましょう。


# --- 1. 複数の患者さんデータを用意 ---
# 各患者の情報が「辞書」で、その辞書が「リスト」に格納されています。
# これは、実際のデータ分析で非常によく使われる形式です。
patient_list = [
    {"name": "田中 太郎", "age": 65, "systolic_bp": 145},
    {"name": "鈴木 花子", "age": 52, "systolic_bp": 120},
    {"name": "佐藤 次郎", "age": 75, "systolic_bp": 160},
    {"name": "高橋 良子", "age": 68, "systolic_bp": 135}
]

# --- 2. forループで、各患者さんのデータを順番に処理 ---
print("--- 全患者の血圧チェック開始 ---")

# patient_list というリストから、患者さんの情報(辞書)を一つずつ取り出し、
# patient_data という変数に入れて、ループを開始します。
for patient_data in patient_list:
    # --- ループ内の処理(ここが4回繰り返される) ---

    # 取り出した辞書から、名前と血圧の値を取得します。
    name = patient_data["name"]
    bp = patient_data["systolic_bp"]

    # 処理中の患者さんを分かりやすく表示します。
    print(f"\n[対象患者: {name} さん]")

    # if文を使って、血圧が140以上かどうかを判定します。
    if bp >= 140:
        # 140以上の場合は、注意喚起のメッセージを表示します。
        print(f"  --> 警告: 血圧が {bp}mmHg です。注意が必要です。")
    else:
        # 140未満の場合は、問題ない旨のメッセージを表示します。
        print(f"  --> 血圧は {bp}mmHg で、基準値内です。")

print("\n--- 全患者のチェック完了 ---")

# === ここから下が上記のprint文による実際の出力 ===
# --- 全患者の血圧チェック開始 ---
#
# [対象患者: 田中 太郎 さん]
#   --> 警告: 血圧が 145mmHg です。注意が必要です。
#
# [対象患者: 鈴木 花子 さん]
#   --> 血圧は 120mmHg で、基準値内です。
#
# [対象患者: 佐藤 次郎 さん]
#   --> 警告: 血圧が 160mmHg です。注意が必要です。
#
# [対象患者: 高橋 良子 さん]
#   --> 血圧は 135mmHg で、基準値内です。
#
# --- 全患者のチェック完了 ---

3. まとめと次のステップ

今回は、プログラムの流れを自在に操るための二大巨頭、if文による条件分岐とfor文によるループ処理を学びました。

  • if: 条件に応じて処理を変える「判断力」をプログラムに与える。
  • for: データの集まりに対して同じ処理を繰り返す「勤勉さ」をプログラムに与える。

これらを組み合わせることで、私たちのプログラムは単なる命令の羅列から、状況に応じて判断し、反復作業を自動化する、真に「使える」ツールへと進化します。この「問題を条件と繰り返しに分解して考える」ことこそ、プログラミング的思考の核心部分と言えるでしょう。

さて、if文やfor文を使って、特定の患者データに対する一連の処理を書けるようになりました。でも、もしこの「一連の処理」を、プログラムのあちこちで何度も使いたくなったらどうでしょう?そのたびに同じコードをコピー&ペーストするのは、賢いやり方とは言えませんよね。

次回、「1.5:現場で役立つPython関数入門 ― 繰り返し処理をスッキリ整理」では、こうした処理を「部品化」し、名前を付けて何度も再利用するための、関数について学んでいきます。

参考文献

  1. Python Software Foundation. Python 3.9.7 documentation – More Control Flow Tools. [Internet]. 2021 [cited 2025 Jun 6]. Available from: https://docs.python.org/3/tutorial/controlflow.html
  2. Sweigart A. Automate the Boring Stuff with Python. 2nd ed. San Francisco, CA: No Starch Press; 2019. Chapter 2, Flow Control.

ご利用規約(免責事項)

当サイト(以下「本サイト」といいます)をご利用になる前に、本ご利用規約(以下「本規約」といいます)をよくお読みください。本サイトを利用された時点で、利用者は本規約の全ての条項に同意したものとみなします。

第1条(目的と情報の性質)

  1. 本サイトは、医療分野におけるAI技術に関する一般的な情報提供および技術的な学習機会の提供を唯一の目的とします。
  2. 本サイトで提供されるすべてのコンテンツ(文章、図表、コード、データセットの紹介等を含みますが、これらに限定されません)は、一般的な学習参考用であり、いかなる場合も医学的な助言、診断、治療、またはこれらに準ずる行為(以下「医行為等」といいます)を提供するものではありません。
  3. 本サイトのコンテンツは、特定の製品、技術、または治療法の有効性、安全性を保証、推奨、または広告・販売促進するものではありません。紹介する技術には研究開発段階のものが含まれており、その臨床応用には、さらなる研究と国内外の規制当局による正式な承認が別途必要です。
  4. 本サイトは、情報提供を目的としたものであり、特定の治療法を推奨するものではありません。健康に関するご懸念やご相談は、必ず専門の医療機関にご相談ください。

第2条(法令等の遵守)
利用者は、本サイトの利用にあたり、医師法、医薬品、医療機器等の品質、有効性及び安全性の確保等に関する法律(薬機法)、個人情報の保護に関する法律、医療法、医療広告ガイドライン、その他関連する国内外の全ての法令、条例、規則、および各省庁・学会等が定める最新のガイドライン等を、自らの責任において遵守するものとします。これらの適用判断についても、利用者が自ら関係各所に確認するものとし、本サイトは一切の責任を負いません。

第3条(医療行為における責任)

  1. 本サイトで紹介するAI技術・手法は、あくまで研究段階の技術的解説であり、実際の臨床現場での診断・治療を代替、補助、または推奨するものでは一切ありません。
  2. 医行為等に関する最終的な判断、決定、およびそれに伴う一切の責任は、必ず法律上その資格を認められた医療専門家(医師、歯科医師等)が負うものとします。AIによる出力を、資格を有する専門家による独立した検証および判断を経ずに利用することを固く禁じます。
  3. 本サイトの情報に基づくいかなる行為によって利用者または第三者に損害が生じた場合も、本サイト運営者は一切の責任を負いません。実際の臨床判断に際しては、必ず担当の医療専門家にご相談ください。本サイトの利用によって、利用者と本サイト運営者の間に、医師と患者の関係、またはその他いかなる専門的な関係も成立するものではありません。

第4条(情報の正確性・完全性・有用性)

  1. 本サイトは、掲載する情報(数値、事例、ソースコード、ライブラリのバージョン等)の正確性、完全性、網羅性、有用性、特定目的への適合性、その他一切の事項について、何ら保証するものではありません。
  2. 掲載情報は執筆時点のものであり、予告なく変更または削除されることがあります。また、技術の進展、ライブラリの更新等により、情報は古くなる可能性があります。利用者は、必ず自身で公式ドキュメント等の最新情報を確認し、自らの責任で情報を利用するものとします。

第5条(AI生成コンテンツに関する注意事項)
本サイトのコンテンツには、AIによる提案を基に作成された部分が含まれる場合がありますが、公開にあたっては人間による監修・編集を経ています。利用者が生成AI等を用いる際は、ハルシネーション(事実に基づかない情報の生成)やバイアスのリスクが内在することを十分に理解し、その出力を鵜呑みにすることなく、必ず専門家による検証を行うものとします。

第6条(知的財産権)

  1. 本サイトを構成するすべてのコンテンツに関する著作権、商標権、その他一切の知的財産権は、本サイト運営者または正当な権利を有する第三者に帰属します。
  2. 本サイトのコンテンツを引用、転載、複製、改変、その他の二次利用を行う場合は、著作権法その他関連法規を遵守し、必ず出典を明記するとともに、権利者の許諾を得るなど、適切な手続きを自らの責任で行うものとします。

第7条(プライバシー・倫理)
本サイトで紹介または言及されるデータセット等を利用する場合、利用者は当該データセットに付随するライセンス条件および研究倫理指針を厳格に遵守し、個人情報の匿名化や同意取得の確認など、適用される法規制に基づき必要とされるすべての措置を、自らの責任において講じるものとします。

第8条(利用環境)
本サイトで紹介するソースコードやライブラリは、執筆時点で特定のバージョンおよび実行環境(OS、ハードウェア、依存パッケージ等)を前提としています。利用者の環境における動作を保証するものではなく、互換性の問題等に起因するいかなる不利益・損害についても、本サイト運営者は責任を負いません。

第9条(免責事項)

  1. 本サイト運営者は、利用者が本サイトを利用したこと、または利用できなかったことによって生じる一切の損害(直接損害、間接損害、付随的損害、特別損害、懲罰的損害、逸失利益、データの消失、プログラムの毀損等を含みますが、これらに限定されません)について、その原因の如何を問わず、一切の法的責任を負わないものとします。
  2. 本サイトの利用は、学習および研究目的に限定されるものとし、それ以外の目的での利用はご遠慮ください。
  3. 本サイトの利用に関連して、利用者と第三者との間で紛争が生じた場合、利用者は自らの費用と責任においてこれを解決するものとし、本サイト運営者に一切の迷惑または損害を与えないものとします。
  4. 本サイト運営者は、いつでも予告なく本サイトの運営を中断、中止、または内容を変更できるものとし、これによって利用者に生じたいかなる損害についても責任を負いません。

第10条(規約の変更)
本サイト運営者は、必要と判断した場合、利用者の承諾を得ることなく、いつでも本規約を変更することができます。変更後の規約は、本サイト上に掲載された時点で効力を生じるものとし、利用者は変更後の規約に拘束されるものとします。

第11条(準拠法および合意管轄)
本規約の解釈にあたっては、日本法を準拠法とします。本サイトの利用および本規約に関連して生じる一切の紛争については、東京地方裁判所を第一審の専属的合意管轄裁判所とします。


For J³, may joy follow you.

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

医師・医学博士・AI研究者・連続起業家
元厚生労働省幹部・ハーバード大学理学修士・ケンブリッジ大学MBA・コロンビア大学行政修士(経済)
岡山大学医学部卒業後、内科・地域医療に従事。厚生労働省で複数室長(医療情報・救急災害・国際展開等)を歴任し、内閣官房・内閣府・文部科学省でも医療政策に携わる。
退官後は、日本大手IT企業や英国VCで新規事業開発・投資を担当し、複数の医療スタートアップを創業。現在は医療AI・デジタル医療機器の開発に取り組むとともに、東京都港区で内科クリニックを開業。
複数大学で教授として教育・研究活動に従事し、医療関係者向け医療AIラボ「Medical AI Nexus」、医療メディア「The Health Choice | 健康の選択」を主宰。
ケンブリッジ大学Associate・社会医学系指導医・専門医・The Royal Society of Medicine Fellow

目次