591 Views
December 17, 21
スライド概要
トピックス: 式,変数,式の抽象化と関数,関数定義,def,関数呼び出し
コンピューターサイエンス
URL: https://www.kkaneko.jp/cc/cs/index.html
YouTube 動画
https://youtu.be/zeleeooCfT0
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
cs-11. 式の抽象化と関数 (コンピューターサイエンス) URL: https://www.kkaneko.jp/cc/cs/index.html 金子邦彦 1
式の抽象化と関数 プログラム 実行結果 実行結果 3つの式を1つにまとめる 式「a * 1.1」を含む 関数 foo を定義 110.00000000000001 440.00000000000006 は計算誤差を含む (誤作動やミスではない)2
アウトライン 11-1 11-2 11-3 項目 復習 式,変数 式の抽象化と関数 関数定義,def 3
ソースコード (source code) • プログラムを,何らかのプログラミング言語 で書いたもの • 「ソフトウエアの設計図」ということも. 人間も読み書き,編集できる • 複数のプログラミング言語を使うことも import picamera camera = picamera.PiCamera() camera.capture("1.jpg") exit() Raspberry Pi で,カメラを使って 撮影し,画像を保存するプログラムの ソースコード 4
オブジェクト,変数,メソッド,代入,変数 • オブジェクト:コンピュータでの操作や処理の対象と なるもののこと • 変数:名前の付いたオブジェクトには,変数,関数な どがある(「変数」は,数学の変数とは違う意味) • メソッド: オブジェクトに属する操作や処理.メソッド 呼び出しでは,引数を指定することがある.引数(ひ きすう)は,メソッドに渡す値のこと Hero.attack("fence", 36, 26) • 代入:「=」を使用.オブジェクトの値が変化する b = a + 100 5
メソッドアクセス,代入 Python プログラムの例 x = 100 a = x + 200 enermy1 = hero.findNearestEnemy() hero.attack(enemy1) • 代入:オブジェクト名 + 「=」 + 式または値またはメソッド呼び出し • メソッドアクセス:オブジェクト名 + 「.」 + メソッド名 +「()」 (引数を付けることも) Python プログラムでは,その他にも,属性アクセス,関数 呼び出し,制御,「*」, 「+」などの演算子,コマンド, 定義など 6
Python Tutor の起動 ① ウェブブラウザを起動する ② Python Tutor を使いたいので,次の URL を開く http://www.pythontutor.com/ ③ 「Python」をクリック ⇒ 編集画面が開く 7
Python Tutor でのプログラム実行手順 (1)「Visualize Execution」をク リックして実行画面に切り替える (2)「Last」をクリック. (4)「Edit this code」をク (3) 実行結果を確認する. 8 リックして編集画面に戻る
Python Tutor 使用上の注意点① • 実行画面で,次のような赤の表示が出ることがある → 無視してよい 過去の文法ミスに関する確認表示 邪魔なときは「Close」 9
Python Tutor 使用上の注意点② 「please wait ... executing」のとき,10秒ほど待つ. → 混雑しているときは, 「Server Busy・・・」 というメッセージが出ることがある. 混雑している.少し(数秒から数十秒)待つと自 動で表示が変わる(変わらない場合には,操作を もう一度行ってみる) 10
11-1. 式,変数 11
いまから 行うこと • Python で,式や変数や計算に 上達する 12
式の実行結果 式の実行結果として,値が得られる print(100 * 200) プログラム 実行結果 13
変数 • 名前の付いたオブジェクトのことを変数という 場合がある(数学の変数とは違う意味) • 式の中に変数を含めることができる x = 100 y = 200 print(x + y) プログラム 実行結果 14
代入 • 代入:プログラムで,「x = 100」のように書く と,x の値が 100 に変化する x = 100 プログラム 実行結果 15
演習 資料:17 ~ 20 【トピックス】 • 式と変数 16
① Python Tutor のエディタで次のプログラムを入れ, 実行し,結果を確認する x = 100 y = 200 print(x + y) 結果の 「300」を確認 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 17
② Python Tutor のエディタで次のプログラムを入れ, 実行し,結果を確認する x = 100 y = 200 print(x * y) 結果の 「20000」を確認 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 18
③ Python Tutor のエディタで次のプログラムを入れ, 実行し,結果を確認する x = 100 y = 200 print((x + 10) * y) 結果の 「22000」を確認 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 19
④ Python Tutor のエディタで次のプログラムを入れ, 実行し,結果を確認する 底辺が2.5で,高さが5のとき, 三角形の面積は,面積: 6.25 teihen = 2.5 takasa = 5 print(teihen * takasa / 2) 結果の 「6.25」を確認 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 20
まとめ • 代入:プログラムで,「x = 100」のように書く と,x の値が 100 に変化する • 式の実行結果として,値が得られる • 式の中に,変数名を書くことができる x = 100 y = 200 print(x + y) 21
11-2. 式の抽象化と関数 22
問いかけ • プログラミングでの根本問題は 何でしょうか? • プログラミングの一番の基礎は 何でしょうか? 23
式の抽象化 100 * 1.1 150 * 1.1 400 * 1.1 類似した複数の式 a * 1.1 変数 a を使って,複数 の式を1つにまとめる (抽象化) 24
式の抽象化と関数 100 * 1.1 a * 1.1 150 * 1.1 400 * 1.1 類似した複数の式 変数 a を使って,複数 の式を1つにまとめる (抽象化) 式「a * 1.1」を含む 関数 foo を定義 関数 foo を使用. 100, 150, 400 は引数 25
抽象化がなぜ大切なのか • プログラミングでの根本問題は何でしょうか? 誤り(バグ)の無いプログラムの作成 • プログラミングの一番の基礎は何でしょうか? • 抽象化を行うこと. • 抽象化により,繰り返し同じことを書くことが減り, バグを防げる. • プログラムの変更(消費税率 10%変更)も簡単に. 26
11-3. 関数定義,def 27
関数定義 • この関数の本体は 「return a * 1.1」 • この関数は,式「a * 1.1」に,名前 foo を付 けたものと考えることもできる 28
式の抽象化と関数 抽象化前 類似した複数の式 実行結果 抽象化後 関数の定義と使用 同じ 実行結果になる 29
演習 資料:31 【トピックス】 • 式の抽象化と関数 • 関数定義 • def 30
Python Tutor のエディタで次のプログラムを入れ, 実行し,結果を確認する def foo(a): return a * 1.1 print(foo(100)) print(foo(150)) print(foo(400)) 結果を確認 (計算誤差がある. 「return a * 1.1」の行は字下げが必要 動作は正常) 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 31
11-4. 関数呼び出し 32
関数呼び出し 呼び出し 呼び出され foo 33
ステップ実行 ステップ実行により、プログラム 実行の流れをビジュアルに観察 34
演習 資料:36 ~ 42 【トピックス】 • 関数呼び出しにおけるジャン プ • 関数内で使用される変数が消 えるタイミング 35
① Python Tutor のエディタで次のプログラムを入 れ,実行し,結果を確認する(あとで使うので消 さないこと) def foo(a): return a * 1.1 print(foo(100)) print(foo(150)) print(foo(400)) 結果を確認 (計算誤差がある. 「return a * 1.1」の行は字下げが必要 動作は正常) 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 36
②「First」をクリックして,最初に戻る 37
③ 「Step 1 of 13」と表示されているので, 全部で,ステップ数は 13 あることが分かる (ステップ数と,プログラムの行数は違うもの) 38
④ 最初に戻したので ・すべてのオブジェクトは消えている ・赤い矢印は先頭のところに戻っている 39
⑤ ステップ実行したいので,「Next」をクリック しながら,矢印の動きを確認. ※「Next」ボタンを何度か押し,それ以上進めなく なったら終了 見どころ foo との間で ジャンプするところ 40
⑥ 終わったら,もう一度,「First」をクリックし て,最初に戻る 41
⑦ もう一度,ステップ実行. 今度は、緑の矢印を見ながら、変数 a が生成、消 去されるタイミングを確認 緑の矢印:いま実行が終わった行 関数 foo の実行中は, 変数 a が現れる 42
全体まとめ プログラム 実行結果 実行結果 3つの式を1つにまとめる 式「a * 1.1」を含む 関数 foo を定義 110.00000000000001 440.00000000000006 は計算誤差を含む (誤作動やミスではない) 43