トップページ
https://wiki3.jp/MathPython 内で書かれていることは,ご自由にご利用ください。管理者により改変されることもあります。工学部学生のための Python 入門(大学のプログラム入...
第13回課題実施報告は,応用編のため必須ではありません。
報告する場合は,9/20 までにしてください。
課題報告メールの件名は
A-303xxxx-13 名前
のように,してください。名前以外は,必ず,半角文字を使用してください。
最初は,A or B で,クラス(A, B は,大文字で半角文字を守ること)
次の数字は,学生番号(y303xxxx) なら,303xxxx の7桁とすること
最後は,報告する授業の回数です。
間の - は,半角のマイナス記号です。
応用編に入ったら報告するかしないかは,自由です。ただし,最終課題の報告は必須です。
教科書『Python Pocket Reference』
⇒ 教科書 p.数字,と書いてあれば,そこをみて,印をつけておくことをおすすめ。
この講義では,自分のために役立つプログラムを作成できるようにする。料理でいうと,自炊ができるレベルを目指す。
今回は,必要なし
⇒ Python の動かし方
講義では,Jupyter Notebook を利用しています。以下を見ておくといいです。
変数は,それぞれ,整数型,文字列型,タプル型,辞書型など,型を持っていました。その型を,自分でも作ることができます。今回は,独自の型(クラス)を作ります。
例として,食塩水型を作りましょう。
食塩水の濃度などを頻繁に計算するときに,「食塩水型」あると便利です。
食塩水型(Saline)を作り,それをもとに,濃度 3 % の 200 g の食塩水を a を作ります。
class Saline: #教科書 p.95def __init__(self, p, g): self.p = p self.g = g
#テスト
a = Saline(3, 200) #食塩水クラスの中の __init__( ) で,3, 200 の値を保管
a.p, a.g
濃度と重量が,食塩水型の変数,a の中に,a.p, a.g として保管されました。
この食塩水クラスは,濃度と重量を値として保持していますが,食塩の量は不明です。しかし,食塩の重量は計算すれば求めることができます。その関数を作ってみましょう。
#getSalt( ) 関数を作る
def getSalt(p, g):ans = (p/100) * g return ans
#テスト
a = Saline(3, 200)
getSalt(a.p, a.g)
この関数は,食塩水の食塩を算出する関数ですので,食塩水クラスの中に,書くことにします。そうすると,コピーして使用するときに,食塩水クラスと塩を求める関数がまとめて,コピーでき便利です。
class Saline:def __init__(self, p, g): self.p = p self.g = g
def getSalt(self): ans = (self.p/100) * self.g return ans#テスト
a = Saline(3, 100)
a.getSalt()
クラスの外で書かれたさきほど関数は
def getSalt(p, g):ans = (p/100) * g return ans
def getSalt(self): #self が登場 ans = (self.p/100) * self.g # p, g にそれぞれ,self. がつく return ans
2種類の食塩水を混合した場合を考えます。
例として,濃度 3 %, 100 g の食塩水と,濃度 9 %, 100 g の食塩水を混ぜたときの濃度と重量はどうなるか,プログラムで計算してましょう。6%, 200 g が求まれば正解です。
class Saline:def __init__(self, p, g): self.p = p self.g = g
def getSalt(self): ans = (self.p/100) * self.g return ans#テスト
a = Saline(3, 100)
b = Saline(9, 100)
s = a.getSalt() + b.getSalt()
g = a.g + b.g
(s/g)*100, g
食塩水の混合計算は,食塩水を扱うときに,当然ある計算です。食塩水クラスの中に入れることにします。
二種類の食塩水を扱うため,加法の定義に,self, other を使います。
加法の記号(+)を定義することを,演算子のオーバーロード(多重定義)といいます。演算子(+)は,数値の加法をするとすでに定義済みです。そこに新たに,食塩水同士の加法を追加定義するということで,オーバーロード(多重定義)といいます。
class Saline:def __init__(self, p, g): self.p = p self.g = g
def getSalt(self): ans = (self.p/100) * self.g return ans
def __add__(self, other): #教科書 p.126 s = self.getSalt() + other.getSalt() g = self.g + other.g p = (s / g) * 100 return Saline(p, g)#テスト
a = Saline(3, 100)
b = Saline(9, 100)
c = a + b
c.p, c.g
食塩水を混合するとき,食塩水クラスを利用すると,食塩水 a, b の混合は
c = a + b
と書くだけで,濃度,重量を自動計算することができます。
クラスの機能を使ったプログラムをオブジェクト指向プログラムといいます。
#テスト
a = Saline(3, 100)
b = Saline(9, 100)
c = a + b
c.p, c.g
a_s = getSalt(3, 100)
b_s = getSalt(9, 100)
c_g = 100 + 100 #重量の計算
c_p = (a_s + b_s)/c_g * 100
c_p, c_g
濃度の計算などこのプログラムを複雑にするところが,食塩水クラスを使うと,食塩水クラスの中に書かれます。
このように,プログラムの複雑なところを,操作対象(オブジェクト)に書くというのが,オブジェクト指向型プログラムといいます。この場合だと,保持する変数,使う関数を食塩水クラスに書きました。
オブジェクト指向プログラムの用語は,本によって定義にぶれがあり,混乱しやすいです。
ここで,確認しておきます。
オブジェクト:操作の対象です。Saline, a, b です。 クラス,インスタンスともにオブジェクトです。
クラス:オブジェクトが持つ,変数,関数が定義されます。Saline です。p, g, init, add などが定義されています。
インスタンス:クラスから生成されるものです。a = Saline(3, 100) と書くと,a インスタンスが,Saline クラスで作られます。
メソッド:オブジェクトが持つ関数です。a.getSalt( ) の getSalt( ) です。
プロパティ:オブジェクトが持つ変数です。a.p の p です。
プログラム関係の本・ウェブの記述を読んで混乱しやすいのは,用語の定義が微妙に違うからです。ここでの定義にそって,読み替えすれば,大丈夫です。
a.getWater() で,食塩水に含まれる水の重さを求めるようにしなさい。getWater( ) をSaline クラス内で定義します。
水溶液 a を分割する演算 a / 3 の / を定義しなさい。Saline クラス内で,__truediv__ を定義します。(教科書 p.126)
以下のテストで,(3, 50) が表示されたら,正解です。濃度が 3 のままで,重量が,100/2 の答えが表示されます。
#テスト
a = Saline(3, 100)
b = a /2
b.p, b.g
それに加えて
「クラスの中に,変数と関数を書けるようになった」と書き
プログラムも書いてください。
(投稿された他の学生のものはコピーして修正しないこと。これをやると伝言ゲームのようにだんだんおかしなプログラムになる)
講義への質問は,suehiro3721p@gmail.com まで
シェアボタン: このページをSNSに投稿するのに便利です。
https://wiki3.jp/MathPython 内で書かれていることは,ご自由にご利用ください。管理者により改変されることもあります。工学部学生のための Python 入門(大学のプログラム入...
Jupyter Notebook を使うほぼ互換の Google Colaboratory を使うGoogle ドライブの中で,「新規」の「その他」の中で,Google Colaboratoryを選ぶ...
教科書『Python Pocket Reference』⇒ 教科書 p.数字,と書いてあれば,そこをみて,印をつけておくことをおすすめ。まずは,⇒ 教科書 p.2 教科書の凡例(conventions...
このページの変更記録09/19 執筆中第14回目の課題はありません。今後の Python 利用 Pyrhon プログラムの料理でいうと自炊レベルとは,必要に応じて,自分専用の関数を作れることといってい...
教科書『30時間でアカデミック Office2019 』https://www.amazon.co.jp/dp/440734833X実習データでウンロード先https://www.jikkyo.co....
Python 入門工学部学生のためのPython 入門高校数学統計...
このページの変更記録09/03 16:05 公開09/27 連絡事項を削除09/27 サンプル一部変更教科書『Python Pocket Reference』⇒ 教科書 p.数字,と書いてあれば,そこ...
このページの変更記録08/24 公開09/27 課題報告メモを削除09/27 サンプル一部変更教科書『Python Pocket Reference』⇒ 教科書 p.数字,と書いてあれば,そこをみて,...
このページの更新記録1019 質問への返答追加08/12 00:15 準備運動のようにキーボード練習をする,を追加08/13 13:16 質問への返答追加。締め切りについて。09/19 16:49 課...
このページの変更記録09/09 23:50 公開09/10 01:08 用語一覧の訂正,演算子のオーバーロードを追加09/12 08:37 課題2のテストを修正09/12 08:52 課題2の表現を変...
このページの変更記録08/16 17:12 公開08/31 15:07 分子コードの例を追加,文章の言い回し一部訂正インストールAnaconda(アナコンダ)をインストールする 2020年夏現在,Py...
エラーメッセージが表示されるものJupter notebook のエラーだが,環境によって違う場合がある。name 'array' is not defined訳 名前「array」が定義されていない...
このページの変更記録08/01 09:09 公開 08/01 09:15 訂正 08/01 12:19 サンプルプログラムに行が余分に空いて表示されると書く08/01 12:54 用語に,「ブロック」...
削除予定このページの変更記録08/16 15:00 公開予定インストールAnaconda(アナコンダ) 2020年夏現在,Python プログラムを開発・実行するためには,Anaconda(無料) を...
ブラウザのキャシュエラーキャシュをクリアをする。Ctrl キー押しながら,更新ボタンをおすまたは,キャシュクリアーするツールを起動するChromebook だとhttp://atomurl.net/c...
py3Dmol で画像が出ない。...
このページの変更記録08/07 17:52 公開08/07 18:08 誤字訂正,言い回し変更08/08 00:32 サンプルプログラムに「#確認用表示」のコメントを追加08/08 00:36 課題文...
このページの変更記録08/13 10:45 公開08/13 11:10 プログラム言語の種類を追加コンピュータは,スマフォからスーパーコンピュータまで同じ構造で,ハードウェアとソフトウェアから成り立つ...
ソースプログラムの保管単位 Python 言語の仕様上最初から入っているもの標準モジュールインストール時にいっしょに入るもの外部モジュール組込みモジュール,標準モジュール でないモジュール。組込みモジ...
このページの変更記録7/30 12:30 公開 7/30 13:17 誤字訂正7/30 18:11 課題修正8/01 08:40 課題修正,比率変更を目立つようにした8/09 14:34 比率の解説を...