Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
33
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
44
2020_k3_python講座第7回
tattsu_hitsuzi
0
39
2020_k3_python講座第6回
tattsu_hitsuzi
0
32
2020_k3_python講座第5回
tattsu_hitsuzi
0
66
2020_k3_python講座第3回
tattsu_hitsuzi
0
1.1k
2020_k3_python講座第2回
tattsu_hitsuzi
0
44
2020_k3_python講座第1回
tattsu_hitsuzi
0
56
Other Decks in Education
See All in Education
生成AIとの付き合い方 / Generative AI and us
kaityo256
PRO
11
6.6k
JavaScript - Lecture 6 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
AIを使って最新研究 について調べて発表しよ う!
mickey_kubo
4
170
Human Perception and Cognition - Lecture 4 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
1.2k
附属科学技術高等学校の概要|Science Tokyo(東京科学大学)
sciencetokyo
PRO
0
2.9k
1125
cbtlibrary
0
140
CSS3 and Responsive Web Design - Lecture 5 - Web Technologies (1019888BNR)
signer
PRO
1
3k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.1k
Node-REDで広がるプログラミング教育の可能性
ueponx
1
210
20250830_本社にみんなの公園を作ってみた
yoneyan
0
180
俺と地方勉強会 - KomeKaigi・地方勉強会への期待 -
pharaohkj
1
1.5k
1008
cbtlibrary
0
110
Featured
See All Featured
Producing Creativity
orderedlist
PRO
348
40k
Designing for Performance
lara
610
69k
Context Engineering - Making Every Token Count
addyosmani
9
530
Why Our Code Smells
bkeepers
PRO
340
57k
How Software Deployment tools have changed in the past 20 years
geshan
0
29k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
9
1k
Building Applications with DynamoDB
mza
96
6.8k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
359
30k
GraphQLとの向き合い方2022年版
quramy
50
14k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
333
22k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
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/ (関数外のリストを操作できる理由)