2日目のゴール
2日目のテーマは
「def で作った関数に“入力を渡して、結果を変える”感覚をつかむこと」です。
1日目は
関数に名前をつける
関数を呼び出す(名前+かっこ)
をやりました。
今日はそこから一歩進んで、
同じ関数でも、渡す値を変えると動きが変わる
「入力」と「処理」と「結果」を意識して読む
関数を“部品”としてアプリに組み込む
ここまでを目指します。
関数を「入力を受け取る機械」としてイメージする
昨日の関数は“いつも同じことをする機械”
1日目の say_hello はこうでした。
def say_hello():
print("こんにちは!")
Python呼び出すたびに、
毎回まったく同じメッセージを出します。
say_hello()
say_hello()
Pythonこれはこれで大事ですが、
「誰にあいさつするか」を変えられたら、もっと便利ですよね。
引数つき関数の第一歩:「名前を渡してあいさつする」
def に「カッコの中の名前」が増える
次のように書き換えます。
def say_hello(name):
print(f"{name}さん、こんにちは!")
Pythonここで増えたのが name です。
これは
「この関数が受け取る“入力の名前”」
だと思ってください。
呼び出すときは、こうなります。
say_hello("太郎")
say_hello("花子")
Python実行結果はこうです。
太郎さん、こんにちは!
花子さん、こんにちは!
ここでの重要ポイントは、
関数の定義側def say_hello(name):
→ 「name という入力を受け取ります」と宣言している
関数の呼び出し側say_hello("太郎")
→ 「’太郎’ という値を name に渡します」と指定している
という対応関係です。
「関数の中でだけ使える名前」がある、という感覚
name は“関数の中だけの変数”
次のコードを見てください。
def say_hello(name):
print(f"{name}さん、こんにちは!")
say_hello("太郎")
print(name) # これはエラー
Pythonprint(name) はエラーになります。
理由は、name は say_hello の中だけで有効な名前だからです。
関数のカッコの中に書いた名前(ここでは name)は、
その関数の“中だけで使える変数”になります。
この「関数の中だけの世界」がある、という感覚は
関数を理解するうえでとても大事です。
def と関数呼び出しを「入力→処理→出力」で読む
例:区切り線+メッセージをまとめる
1日目の区切り線を、少し進化させます。
def print_box(message):
print("==========")
print(message)
print("==========")
Python呼び出し側はこうです。
print_box("メニューを表示します")
print_box("処理が完了しました")
Python実行結果はこうなります。
==========
メニューを表示します
==========
==========
処理が完了しました
==========
ここで、関数をこう読んでみてください。
入力message という名前で文字列を受け取る
処理
上と下に線を引き、その間に message を表示する
出力(画面への表示)
print で結果を見せる
この「入力→処理→出力」の流れを
自分の頭の中で言葉にできるようになると、
関数が一気に“生きたもの”になります。
小さなアプリに関数を組み込んでみる
「メニューを表示する処理」を関数にする
コンソールアプリでは、
メニューを何度も表示することがよくあります。
関数なしだと、こうなります。
print("1: 追加")
print("2: 削除")
print("0: 終了")
Pythonこれを関数にまとめます。
def show_menu():
print("1: 追加")
print("2: 削除")
print("0: 終了")
Python使うときはこうです。
print("簡単メニューアプリ")
show_menu()
choice = input("番号を選んでください: ")
print("あなたが選んだ番号:", choice)
Pythonここではまだ引数はありませんが、
「メニューを表示する」という意味のかたまりに名前をつけた
というのがポイントです。
引数つき関数をアプリっぽく使う
「メッセージを強調して表示する」関数
次のような関数を作ってみます。
def emphasize(message):
print("----")
print(message)
print("----")
Pythonこれを使って、
ユーザーへの案内を少し“アプリっぽく”します。
def emphasize(message):
print("----")
print(message)
print("----")
emphasize("簡単メニューアプリへようこそ")
print("1: 追加")
print("2: 削除")
print("0: 終了")
emphasize("番号を入力してください")
choice = input("番号: ")
emphasize(f"あなたが選んだのは {choice} です")
Pythonここでの深掘りポイントは、
同じ関数 emphasize に
違うメッセージを渡すことで、
「同じ形で、違う内容」を表示できている
ということです。
関数は「形」を持っていて、
引数は「中身」を変えるためのスイッチ
だとイメージしてみてください。
2日目のミニアプリ:あいさつ+メニュー表示アプリ
今日の学びを全部入れたコード
def say_hello(name):
print(f"{name}さん、こんにちは!")
def print_box(message):
print("==========")
print(message)
print("==========")
print_box("関数練習アプリ")
user_name = input("あなたの名前を入力してください: ")
say_hello(user_name)
print_box("メニュー")
print("1: 今日の目標を表示")
print("0: 終了")
choice = input("番号を選んでください: ")
if choice == "1":
print_box("今日の目標:def と関数呼び出しを理解する")
else:
print_box("アプリを終了します")
Pythonこの中で、
def say_hello(name):
→ 「name という入力を受け取って、あいさつする処理」
def print_box(message):
→ 「message を枠で囲んで表示する処理」
user_name = input(...)
→ ユーザーからの入力を受け取って、関数に渡している
という流れになっています。
つまずきポイントをもう一段深く押さえる
名前のつけ方で混乱しないコツ
よくある混乱がこれです。
def say_hello(name):
print(f"{name}さん、こんにちは!")
user_name = input("名前: ")
say_hello(user_name)
Pythonここで、
name と user_name は別物です。
user_name は「関数の外側の変数」name は「関数の中だけで使える変数」
呼び出しのときに、user_name の中身が name にコピーされるイメージです。
「外の名前」と「中の名前」は別でいい
という感覚を持っておくと、かなり楽になります。
2日目のまとめ:今日つかんでほしい感覚
今日の本質は、これです。
関数は「名前のついた処理のまとまり」だけでなく
「入力を受け取って、動きを変えられる部品」である。
def 関数名(引数名):
→ 「こういう入力を受け取る処理ですよ」と宣言している
関数名(値)
→ 「この値をその処理に渡して実行して」と命令している
引数は「関数の中だけで使える変数」
同じ関数でも、渡す値を変えれば結果が変わる
ここまでイメージできていれば、
3日目以降の「戻り値」「関数を組み合わせる」が
ぐっと理解しやすくなります。

