コース進捗 コース目次 24レッスン中 24件を公開中
Pythonの基礎
データとコレクション
信頼できるプログラムを作る
オブジェクトでモデル化する
プロフェッショナルなPython
上級Python
Pythonに信号機を渡そう
ここまでのPythonは、一本道を上から下へ進みました。役立つプログラムには、「答えがはいなら、こちらへ進む」「仕事が残っている間、もう一度行う」という信号機も必要です。これを制御フローと呼びます。
- 聞く TrueかFalseの質問
- 選ぶ 一致した道を1つ進む
- 繰り返す 仕事が終わるまで
最後には「7日間学習トラッカー」を作ります。7回質問し、目標を達成した日を数え、1週間のメッセージを1つ表示します。
質問を作り、道を1つ選ぶ
比較の答えは、真偽値のTrueかFalseです。
minutes = 35
print(minutes == 35)
print(minutes != 35)
print(minutes > 30)
print(minutes >= 40)
出力:
True
False
True
False
6つの比較演算子は==、!=、>、>=、<、<=です。等号1つは代入、2つは比較です。また、整数と文字列は別の型なので、30 == "30"はFalseになります。
if、elif、elseで、道を1つだけ選びます。
score = 82
if score >= 90:
print("優秀")
elif score >= 60:
print("合格")
else:
print("もう一度挑戦")
出力:
合格
- 90以上? 優秀
- 60以上? 合格
- それ以外 もう一度挑戦
- 最初の一致 そこで選択は終わり
コロンがブロックを始め、4つの空白がその中の命令を示します。インデントは飾りではなく、Pythonの文法です。
両方が真でなければならないときはand、どちらか一方でよいときはor、真偽を逆にするときはnotを使います。
minutes = 40
exercise_done = True
if minutes >= 30 and exercise_done:
print("今日の学習は完了です")
False、None、0、""は、条件の中で偽として扱われます。それ以外の多くは真です。"False"は空ではない文字列なので、bool("False")はTrueになる点に注意してください。
ループの道を歩こう
回数が決まっているならforを使います。
for day in range(1, 4):
print(f"{day}日目")
出力:
1日目
2日目
3日目
range(1, 4)は4の直前で止まります。そのため、range(1, 8)で1日目から7日目までを作れます。
合計を覚える累積値と、回数を覚えるカウンターは、ループの前で始め、内側で更新します。
total = 0
days_met = 0
for minutes in (30, 20, 40):
total += minutes
if minutes >= 30:
days_met += 1
print(total)
print(days_met)
出力:
90
2
変化する条件によって終わるならwhileです。
remaining = 3
while remaining > 0:
print(remaining)
remaining -= 1
print("スタート!")
-
確認
remaining > 0? - 実行 今の数を表示
- 変化 1を引く
出力は3、2、1、最後に「スタート!」です。breakはループを途中で抜け、continueは次の繰り返しへ飛びます。道を追いやすくするため、必要なときだけ使いましょう。
7日間学習トラッカーを作ろう
標準機能だけで動く完全なミニプロジェクトです。study_tracker.pyへ保存します。
target = int(input("1日の目標(分):"))
total = 0
days_met = 0
for day in range(1, 8):
minutes = int(input(f"{day}日目の学習時間(分):"))
total += minutes
if minutes >= target:
days_met += 1
print("目標達成")
else:
missing = target - minutes
print(f"あと{missing}分")
average = total / 7
print()
print(f"週間合計:{total}分")
print(f"1日平均:{average:.1f}分")
print(f"目標達成:7日中{days_met}日")
if days_met == 7:
print("毎日達成しました!")
elif days_met >= 5:
print("充実した1週間でした")
else:
print("少しずつ習慣を作りましょう")
目標を30分にし、30, 20, 45, 30, 35, 10, 40を1つずつ入力します。集計を確認してください。
週間合計:210分
1日平均:30.0分
目標達成:7日中5日
充実した1週間でした
境界も試します。コードは>=なので、ちょうど30分も達成です。7日達成なら「毎日達成しました!」、4日なら「少しずつ習慣を作りましょう」を選ぶ必要があります。
3つの小さなチャレンジとループの安全
- 得点の門。 90以上は「優秀」、60〜89は「合格」、60未満は「もう一度挑戦」と表示します。59、60、89、90で試します。
- 1から10を足す。
sum()を使わず、range()と累積値で合計します。55になれば成功です。 - 安全なカウントダウン。 開始する整数を受け取り、
whileで数を減らします。毎回1つの値が変わることを確認し、0のときの動きも決めます。
注意点:文字列をint()へ渡すとValueErrorになり、第10章で対応します。コロンや4つの空白を忘れると、構文またはインデントのエラーになります。whileの条件が永遠に偽にならなければ無限ループです。Ctrl+Cで止め、足りない更新を探してください。
繰り返す仕事に名前を付ける準備はできたかな?
- 6つの比較演算子で真偽値を作れる
-
=は代入、==は比較だと説明できる - 分かりやすい
if/elif/elseを書ける -
and、or、notで条件を組み合わせられる -
range()が終了値を含まないと分かる - ループ全体で合計と回数を覚えられる
- 自分の
whileが止まる理由を説明できる - トラッカーで210分の期待結果を出せる
- 3つの小さなチャレンジを終えた
次章では、繰り返す仕事を名前の付いた関数へ入れ、長いプログラムも読みやすく、確かめやすくします。