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
32
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
42
2020_k3_python講座第7回
tattsu_hitsuzi
0
38
2020_k3_python講座第6回
tattsu_hitsuzi
0
31
2020_k3_python講座第5回
tattsu_hitsuzi
0
65
2020_k3_python講座第3回
tattsu_hitsuzi
0
1.1k
2020_k3_python講座第2回
tattsu_hitsuzi
0
43
2020_k3_python講座第1回
tattsu_hitsuzi
0
55
Other Decks in Education
See All in Education
今も熱いもの!魂を揺さぶる戦士の儀式:マオリ族のハカ
shubox
0
210
技術文章を書くための執筆技術と実践法(パラグラフライティング)
hisashiishihara
18
6.5k
SkimaTalk Teacher Guidelines
skimatalk
0
790k
(キラキラ)人事教育担当のつらみ~教育担当として知っておくポイント~
masakiokuda
0
100
検索/ディスプレイ/SNS
takenawa
0
5.4k
2025年度春学期 統計学 第10回 分布の推測とは ー 標本調査,度数分布と確率分布 (2025. 6. 12)
akiraasano
PRO
0
140
小さなチャレンジが生んだチームの大きな変化 -私のふりかえり探求の原点
callas1900
0
530
Gamified Interventions for Composting Behavior: A Case Study Using the Gamiflow Framework in a Workplace Setting
ezefranca
1
120
子どものためのプログラミング道場『CoderDojo』〜法人提携例〜 / Partnership with CoderDojo Japan
coderdojojapan
4
16k
OpenRobomaster 中国のロボットコンテスト 日本連携の可能性
takasumasakazu
0
450
計算情報学研究室 (数理情報学第7研究室)紹介スライド (2025)
tomonatu8
0
520
Data Processing and Visualisation Frameworks - Lecture 6 - Information Visualisation (4019538FNR)
signer
PRO
1
2.4k
Featured
See All Featured
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Learning to Love Humans: Emotional Interface Design
aarron
273
40k
Art, The Web, and Tiny UX
lynnandtonic
299
21k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Typedesign – Prime Four
hannesfritz
42
2.7k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
490
Gamification - CAS2011
davidbonilla
81
5.3k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
How To Stay Up To Date on Web Technology
chriscoyier
790
250k
GraphQLとの向き合い方2022年版
quramy
49
14k
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/ (関数外のリストを操作できる理由)