Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
2020_k3_python講座第4回
Search
k3たっつー
June 20, 2020
Education
0
28
2020_k3_python講座第4回
2020年度のk3のpython講座第4回の内容になります
k3たっつー
June 20, 2020
Tweet
Share
More Decks by k3たっつー
See All by k3たっつー
2020_k3_python講座第8回
tattsu_hitsuzi
0
35
2020_k3_python講座第7回
tattsu_hitsuzi
0
32
2020_k3_python講座第6回
tattsu_hitsuzi
0
26
2020_k3_python講座第5回
tattsu_hitsuzi
0
60
2020_k3_python講座第3回
tattsu_hitsuzi
0
1.1k
2020_k3_python講座第2回
tattsu_hitsuzi
0
40
2020_k3_python講座第1回
tattsu_hitsuzi
0
48
Other Decks in Education
See All in Education
2024年度春学期 統計学 講義の進め方と成績評価について (2024. 4. 11)
akiraasano
PRO
0
130
Before You Create Something
nandenjin
0
140
SUMMER SCHOOL 2024
pnuslide
0
160
View Manipulation and Reduction - Lecture 9 - Information Visualisation (4019538FNR)
signer
PRO
1
1.4k
Introduction - Lecture 1 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
3.1k
電気工学問題集 /eleceng2_practices
kfujita
0
120
Avoin jakaminen ja Creative Commons -lisenssit
matleenalaakso
0
1.1k
Animaatiot opetuksessa
matleenalaakso
0
3.2k
Sähköiset kyselyt, kokeet ja arviointi
matleenalaakso
1
16k
D&I推進レポート〜テクノロジー分野のジェンダーギャップとその取り組みについて〜
codeforeveryone
1
1.2k
情報Iの「縦糸」と「横糸」を意識したプログラム教育の実践
asial_edu
0
220
パフォーマンス・チューニング入門
oracle4engineer
PRO
2
810
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
45
9.8k
WebSockets: Embracing the real-time Web
robhawkes
59
7k
What’s in a name? Adding method to the madness
productmarketing
PRO
17
2.7k
Web development in the modern age
philhawksworth
203
10k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
123
39k
Optimizing for Happiness
mojombo
370
69k
Thoughts on Productivity
jonyablonski
60
3.9k
Documentation Writing (for coders)
carmenintech
60
4k
Code Review Best Practice
trishagee
56
15k
Fontdeck: Realign not Redesign
paulrobertlloyd
76
4.9k
Imperfection Machines: The Place of Print at Facebook
scottboms
261
12k
Large-scale JavaScript Application Architecture
addyosmani
504
110k
Transcript
K3 Python講座 6月20日 担当:くまばち 今日のテーマ:関数
前回のおさらい タートル機能 forward, backward – 前進, 後退
left, right – 旋回 circle – 半径xの円を描く up, down – 筆の上げ下げ color, fillcolor – 筆の色、塗りつぶしの色を指定 begin_fill ~ end_fill – 間で記述した図形を塗りつぶす
復習問題(L4_0.py) Turtleを用いて車を書いてみよう 四角と丸二つの簡単な奴でおk(てか僕はそうしました) 余裕があったら複数台書いたり色付けたりしてみよう
復習問題解答(一例) 描画開始座標、車の色の情報を含んだ 多重リストを作る 一台分の車の描画をforループで回す
今回のテーマ 関数 関数とは? 関数の定義 変数のスコープ
再帰関数
関数とは? 繰り返し利用したい命令群をひとまとめにし、呼び 出せるようにしたもの 処理をまとめておくことでコードが見やすくなる、重複した 処理を無くせる等のメリット 関数 出力 計算・処理
返り値 (なくてもいい)
print()、 input()等、Python自体にあらかじめ用意 されている関数 組み込み以外のものを使いたい ⇒importするか自分で作ろう 組み込み関数 importを必要 としない
モジュール Python
関数の定義 def 関数名(引数): //処理の内容 return x //返り値が欲しい場合 基本はこの形
引数は複数指定可能 (引数=デフォルト値)と定義すると、引数が省略され た際デフォルト値が利用される(デフォルト引数) 注意:通常の引数の前にデフォルト引数を置くとエラー を吐きます
関数の定義(続き) def 関数名(引数): //処理の内容 return x //返り値が欲しい場合 returnを省略すると返り値にNoneが入る
呼び出す際はprint()等と同様に、関数名(引数) 必ず関数を定義してから呼び出そう ※Pythonでは「関数を定義し、変数に代入」という処 理を行っているので、関数と変数の名前が被らないよ う気を付けよう
例題1(L4_1.py) 与えられた数値リストの平均、分散、標準偏差を求 める関数を定義し、以下のリストの平均、分散、標 準偏差を求めよう nums = [14, 2, 13,
20, 16] 平均をとすると、 分散 σ2 = 1 σ=1 − 2 値と平均の差の二乗を平均したもの 標準偏差 σ = 1 σ =1 − 2 分散のルート
例題1解答
変数のスコープ スコープ(有効範囲) 0と10、どっちが出力されるだろう 0が出力される 10はf1内のローカル変数xに代入され、外のグローバル 変数xの値は変わらない
変数のスコープ(続き) じゃあこれも…? f1内にローカル変数xが定義されていないか らエラーを吐くのでは? 問題なく100が出力される Pythonでは関数内にローカル変数が定義されていない 場合、外のスコープにある変数を参照しに行く
変数のスコープ(続き) 関数内でグローバル変数を宣言 こうするとf1内でグローバル変数xに代入できるよう になり、10が出力される 便利ではあるが予期せず変数の値が変わってしまうこと もあるため、使う際はしっかりと設計した上で
再帰関数 処理の中で自分自身を呼び出す関数 なぜ使うの? どんな大きな問題でも小さく分割すれば楽に解決でき るのでは?という着眼点に基づく 入力の規模が大きくなるにつれ実行時間が飛躍的に
長くなることに注意 実装例: フィボナッチ数
再帰関数(続き) 再帰のルール 終了条件を明白にしておくこと(無限ループしないよ うに) 終了条件に向かって状態を変えながら進んでいくこと 再帰的に自分自身を呼び出し続けること
繰り返し回数分かってるならfor文の方がいいです…
例題2(L4_2.py) 再帰関数を用いて、ユークリッドの互除法を関数で 定義し、3355と2379の最大公約数を求めよう ユークリッドの互除法: 120 ÷ 66 = 1
余り 54 66 ÷ 54 = 1 余り 12 54 ÷12 = 4 余り 6 12 ÷ = 2 このように割る方と余りを次式に代入し、 余りが0になった際の割る方が最大公約数となる
例題2解答
まとめ 関数は一連の処理を再利用するためのしくみ def 関数名(引数): 関数内外では変数のスコープが違う global変数
再帰関数:自分自身を呼び出す
演習(L4_3.py) ブラックジャックゲームを作ってみよう 最初にトランプの山から手札を二枚引く その後一枚引くか(ヒット)止めるか(スタンド)を繰り 返し、より21に近い合計値を作れた方の勝ち J, Q,
Kの値は10、Aは1 21を超えると自動的に敗北(バースト) 実際にはもう少し詳しいルールではあるが、難易度 が高くなるためどの範囲まで実装するかは自由 ヒント:関数の外にあるリストでも関数内で操作は できる
演習(L4_3.py) reset_deck() ⋯ トランプの山を生成 hit(hand) ⋯ 手札のリストを引数にとり、山からカードを一枚手札に加え、 手札の点数を随時計算する
show_hand(hand, player) ⋯ 手札のリストとプレイヤー名(str)を引数に とり、プレイヤー名とその人の手札を表示する judge(point, dealer_point) ⋯ 自身の点数とディーラーの点数を比較し、 勝利判定を行う これらの関数を定義してプログラムしてみよう
演習(L4_3.py) より詳細なルール Aは手札によって1か11か値を選べる Aと10,J,Q,Kのいずれかを揃えるとブラックジャック ディーラーがブラックジャックでなければ勝利 ディーラーの手札は一枚公開、一枚非公開でスタートする
(プレイヤーに降りるチャンスを与えるためのものだから掛 け金システムつけないならいらないかも) ディーラーはヒットスタンドを選べない 17以上になるまで引き続ける 掛け金システムを実装すればスプリット,ダブルダウンなど の戦術が使えるようになる(僕はやりません) 自分以外にCOMをプレイヤーとして用意しても面白いです ね(僕は(ry)
演習解答
演習解答
参考 https://snowtree-injune.com/2018/07/29/post-738/ (関数外のリストを操作できる理由)