第7回目 関数作成
このページの変更記録08/05 13:36 公開第7回課題実施報告の締め切りは,8/12です。(締め切りに遅れても受付はします)課題報告メールの件名はA-303xxxx-07 名前(漢字名がのぞましい...
第14回目の課題はありません。
Pyrhon プログラムの料理でいうと自炊レベルとは,必要に応じて,自分専用の関数を作れることといっていいでしょう。さらに,応用編で扱ったクラスが作れるとは,料理でいうと,味噌や漬物などの保存食品を自分で作れるレベルといえます。今回の授業では,そこまで学習しました。
今後は,料理でいうレシペを,ウェブ・書籍等で検索して,利用していけばやっていけます。
第14回では,今までの課題の解答例をしめしながら,復習し,さらに,触れていない,Python の重要項目を列強します。
この連載では,Jupyter Notebook というアプリの中で,Python プログラムを作成し,動かしてきましました。
ほとんどのプログラムは,事前に,その回で指定あった初期化プログラムを動作さえてました。その役割を解説します。
第11回目の初期化プログラムは,以下のようでした。
#初期化プログラム。動作確認を含めて,プログラム作成のとき1度実行しておく
from math import * # math モジュールを利用する
from matplotlib.pyplot import * #グラフ関係を利用する
%matplotlib inline
from numpy import * #ベクトル演算,行列演算を効率化
from scipy.stats import norm #正規分布の計算
from pandas import DataFrame, read_csv #表形式を扱う
import py3Dmol #分子モデル表示
pi # πの値が表示されたら,正常動作している
です。
グラフを表示できるようにする命令は,JupyterNotebook 特有の命令で,グラフをプログラムを実行したところの真下に表示させるという命令です。
1), 2) は,Python プログラムであれば,どこでも使用する命令です。それを解説します。
sin, pi など,import しないと使用できません。
それぞれのプログラムは,以下の初期化プログラムが実施してあるものとします。
#初期化プログラム。動作確認を含めて,プログラム作成のとき1度実行しておく
from math import * # math モジュールを利用する
from matplotlib.pyplot import * #グラフ関係を利用する
%matplotlib inline
from numpy import * #ベクトル演算,行列演算を効率化
from scipy.stats import norm #正規分布の計算
from pandas import DataFrame, read_csv #表形式を扱う
import py3Dmol #分子モデル表示
from ipywidgets import *
from IPython.display import clear_output
pi # πの値が表示されたら,正常動作している
プログラムソースは,こちらの表示システムとの関係で,( と ( を ( ( と開けてあるが,(( とすればよい。
また,行が無駄に空いているが,本来は,空けても1行分である。
ここで,関数電卓として,Python を利用できることを目指しました。料理でいうと,カップヌードルを作るレベルである。しかし,このレベルでも複雑な計算では,Python プログラムの恩恵を受けることができます。
r = 3
#半径*半径*円周率
r * r * pi
a = 1
b = 2
c = -1
のとき
a*x**2 + b*x + c = 0
の解を求めるプログラムを作成せよ。解の公式を利用すること。
a = 1
b = 2
c = -1
(-b - (b**2 - 4*a*c)**(1/2))/2*a, (-b + (b**2 - 4*a*c)**(1/2))/2*a
例
20gの水酸化ナトリウムNaOHを水に溶かして2Lとした時の水酸化ナトリウム水溶液のモル濃度を計算せよ。
ただし、原子量は以下とする。
Na=23、O=16、H=1
(省略)
提出されたもは,散布図を2回描くなど無駄が多かった。
データを変更し,変数名をそれらしいものし,途中の確認のための表示をカットすればよかった。
#体重と身長のデータ
W = array( (62, 68, 58, 68, 52, 65, 70) )
H = array( (183, 178, 173, 178, 168, 181, 180) )
a, b = polyfit(W, H, 1) #回帰直線 y = ax + b の a, b を求める
vH = a * W + b #回帰直線作図のための値を生成
scatter(W, H, color='blue')
plot(W, vH, color='red') #回帰直線は折れ線の機能で描く
print('回帰直線 y = ', a, 'x +', b) # y = ax + b を表示
適当な数字を4つ,タプル型変数に代入し,それを * 3 をしてみる
また,その4つの数字を numpy.array変数に代入し,* 3 をしてみる
A = 3, 20, 4, 7
B = array(A)
A * 3, B * 3
ヒストグラムに向いた適当な数字(20個以上)を用意し,ヒストグラムと強制的な生成した正規分布曲線を重ねて表示してください。
今回,変数名の H は,必ず変更すること。重ねるときの比率は,例の0.06から変更すること。値のヒントは,ヒストグラムを単体で表示したときの値です。
データの数字を変更し,データ全体を示す変数名を変更(H→A),さらに,比率は,一番高いところどうしを合わせる,それぞれ,max( ) でいいのではということで,max( ) を試すと,できます。3, 4 の山を合わせるには,4 の方を,4 で割って,3 倍する原理。max(HD[0])をmax(Y)で割ればよいと予想。
データは,総務省統計研修所編集「世界の統計2012」アジア各国の平均寿命から
A = array((83, 48, 78, 65, 82, 66, 73, 65, 68, 69, 74, 64, 80, 61, 70, 78, 72, 74, 82, 70 ))X = arange(mean(A)-3*std(A), mean(A)+3*std(A), 0.1)
#確率密度関数(X,平均、標準偏差)
Y = norm.pdf(X, mean(A), std(A))
HD = hist(A, color='blue')
r = max(HD[0])/max(Y) #ヒストグラムと曲線のトップをあわせる比率 (それぞれ変更すること)
plot(X, Y*r, color='red') #折れ線を使って表示
例を参考に,1 から n までの奇数のみを合計するプログラムを作成しななさい。「データ用意」は,n = 11 としてください。
#データ用意
n = 11
# 1 から n の奇数を合計する
s = 0
for i in range(1, n + 1, 2):
#改行せずに,後ろに', '付きで,表示していく print(i, end = ', ') s = s + i
#確認
print(s)
1 から 20 まで数字を,5 の倍数か,7の倍数かを判断するプログラムを作成しなさい。
for i in range(1, 20+1, 1):
if i % 5 == 0: # 演算子 % は,剰余を返す print(i ,' は 5 の倍数') continue # ループ内の以下のブロック内命令を飛ばす。
if i % 7 == 0: print(i ,' は 7 の倍数') else: print(i ,' は 5 の倍数でもないし,7 の倍数でもない')
1 から 20 まで数字を,素数か否かを判断するプログラムを作成しなさい。
print(1, ' は 素数でない')
print(2 ,' は 素数')
for i in range(3, 20+1):
if i % 2 == 0: print(i ,' は 素数でない') continue
if i % 3 == 0: print(i ,' は 素数でない') continue
print(i ,' は 素数')
例に従って,台形の面積を求める関数を作れ
#台形の面積を求める
def daikei_menseki(up, base, hight):ans = 1/2 * (up + base) * hight return ans
#テスト
jyohen = 3
kahen = 7
takasa = 5
daikei_menseki(jyohen, kahen,takasa)
化学関連の式から関数を作れ
(省略)
第2回目 回帰直線の自分の課題のデータを書き出し,それを,読み込み,同じデータとなることを確認せよ。
書き出しファイル名(CSVファイル名)は,sample.csv,とし,あとの変数名等は適時変更すること。
サンプルから,H, W,データ,height, weight をデータに合わせて変更すればよい。以下は,サンプルを少し変形している。
# 統計データ用意,身長(H),体重(W),5人分
H = (183, 178, 173, 178, 168)
W = (62, 68, 58, 65, 52)
#表(table)の形式で扱う
D = DataFrame([H, W]) #表形式でデータをまとめる
#下に伸ばすため,表を90度回転する。
Ta = D.T
#列に,height, weight と名前をつける
Ta.columns = ['height', 'weight']
# ファイルに保管する(CSV 形式)
Ta.to_csv('sample.csv')
#テスト
#別の名前で,これを読み込みます。
TaR = read_csv('sample.csv')
Hr = tuple(TaR['height'])
Wr = tuple(TaR['weight'])
Hr, Wr #確認用表示(課題報告時は残す)
課題なし
Azura Jyupter などを使うときは,使用前に,通常の初期化プログラムの前に,標準モジュール以外を再インストール必要がある。自分のパソコンの場合は,一度インストールすれば再インストールは必要なし
分子モデルを表示するためには,以下のように外部モジュールをインストールする
!pip install py3Dmol
Azura Jyupter など外部のサービスを利用のときは,以下を再インストール必要がある場合があります。
!pip install py3Dmol
以下の4行を参考にして,my3Dmol(num)関数を作成しなさい。num は,整数型変数です。関数の中では show()はかかないこと。
num = 611 #グルタミン酸
E = py3Dmol.view(query='cid:'+str(num), width=300, height=200)
E.setStyle({'stick': {}})
E.show()
G = my3Dmol(750)
G.show( )
def my3Dmol(num):E = py3Dmol.view(query='cid:'+str(num), width=300, height=200) E.setStyle({'stick': {}}) return E
#テスト
G = my3Dmol(750)
G.show( )
myAA3Dmol(ch)関数を作成しなさい。ch は,文字列型変数です。関数の中では show()は書かないこと。
正しく作成できたら,以下の2行で,グルタミン酸の分子が表示されます。
E = myAA3Dmol('E')
E.show()
def myAA3Dmol(ch):from py3Dmol import view cid_ch = str(A_A[ch][2]) #文字にしたがって,2つ目の情報を文字として取り出す。 E = py3Dmol.view(query='cid:'+cid_ch, width=300, height=200) E.setStyle({'stick': {}}) return E
E = myAA3Dmol('E')
E.show()
While ループで,1から30まで,3の倍数のみ合計し,表示する。
実装例
s = 0
i = 1
while i < (30 + 1):if i % 3 ==0: s = s + i i = i + 1print(s)
適当な関数と interact を組みあせてみる。
実装例
def sum_loop(n):s = 0 for i in range(n+1): s = s + i return s
interact(sum_loop, n=10)
a.getWater() で,食塩水に含まれる水の重さを求めるようにしなさい。getWater( ) をSaline クラス内で定義します。
実装例
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 getWater(self): ans = self.g - self.getSalt() return ans
def __add__(self, other): s = self.getSalt() + other.getSalt() g = self.g + other.g p = (s / g) * 100 return Saline(p, g)
#テスト
a = Saline(3, 100)
a.getWater()
水溶液 a を分割する演算 a / 3 の / を定義しなさい。Saline クラス内で,__truediv__ を定義します。(教科書 p.126)
以下のテストで,(3, 50) が表示されたら,正解です。濃度が 3 のままで,重量が,100/2 の答えが表示されます。
実装例
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 getWater(self): ans = self.g - self.getSalt() return ans
def __add__(self, other): s = self.getSalt() + other.getSalt() g = self.g + other.g p = (s / g) * 100 return Saline(p, g)
def __truediv__(self, other): g = self.g / other return Saline(self.p, g)
#テスト
a = Saline(3, 100)
b = a /2
b.p, b.g
第14回は,課題はありません。よかったら全15回をやってみた感想など送ってもらえるとうれしいです。
(報告は必須ではありません)
講義への質問は,suehiro3721p@gmail.com まで
シェアボタン: このページをSNSに投稿するのに便利です。
このページの変更記録08/05 13:36 公開第7回課題実施報告の締め切りは,8/12です。(締め切りに遅れても受付はします)課題報告メールの件名はA-303xxxx-07 名前(漢字名がのぞましい...
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 言語の仕様上最初から入っているもの標準モジュールインストール時にいっしょに入るもの外部モジュール組込みモジュール,標準モジュール でないモジュール。組込みモジ...