Views
関数とモジュール
このレッスンは ~/python/11 ディレクトリでプログラムを作成し、実行すること。
関数
- これまで,いろいろな形で既存の関数を使ってきました。
- 例: input(), math.sin() etc. etc.
- 関数を自分で作成することもできます。(詳しくは教科書の IV部 関数)
関数を作ってみる
- インタラクティブモードで
>>> def tax(x): ... a = 1.05 ... print '税込み', x * a, '円' ... >>>
- この例では,関数 tax(x) を def ... に続く2行で定義しています。
- 関数の中であることを示すためにこの2行は,頭下げ(インデント)していることに注意してください。
できた関数を使ってみる
- この関数を使うには、次のように入力ます。
>>> tax(360) 税込み 378.0 円 >>>
値を返す関数
- math.sin() のように値を返す関数を作りたい場合には,
>>> import math >>> def func(x): ... y = math.sin(x)/x ... return y ... >>> func(0.1) 0.99833416646828155
- のように,return を使って返します。
関数をモジュールに作る
- 以上では,インタラクティブモードでの実行でしたが,作成した関数を再利用できるようにするには,モジュールを作成します。
# -*- coding: utf-8 -*- # a.py ... 掛け算表を作るモジュール def multable(n): table = [] for i in range(1, n+1): row = [] for j in range(1, n+1): row.append(i*j) table.append(row) return table
モジュールの利用
- 自分で作ったモジュールを Python インタラクティブモードで使ってみましょう。
>>> import a >>> a.multable(3) [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
スクリプトから呼び出す
- 次に,a モジュールを使って掛け算表を整形して印刷するような Python スクリプト (b.py) を作ってみましょう。
#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import a   # コマンドラインから n を取り出す n = int(sys.argv[1]) # 掛ける数を最初に印刷 for i in range(1, n+1): print '%3d' % i, print print '----' * n # モジュールから表作成関数を呼び出す t = a.multable(n) # 結果を整形して印刷 for x in t: for y in x: print '%3d' % y, print
実行例は以下のようになる
$ ./b.py 3 1 2 3 ------------ 1 2 3 2 4 6 3 6 9
問題1.
- 2次方程式 a x2 + b x + c = 0 の解を公式によって計算する関数 solve(a, b, c) を モジュール(q1.py)に作成しなさい。以下の実行例を参考にしなさい。
- 平方根の計算 ... math.sqrt() / 利用可能な関数については Python のオンラインマニュアル も参考にしてください。
>>> from q1 import solve >>> solve(1.0, 0.0, -1.0) 解は: 1.0 , -1.0 >>> solve(1.0, -2.0, 1.0) 解は: 1.0 >>> solve(1.0, 0.0, 1.0) 実数の範囲を越えます
問題2
- Python calendar モジュールのマニュアル を参考に,以下のような出力が得られるスクリプト(q2.py)を作成しなさい。
$ ./q2.py 2006 12 2006 年 12 月 日 月 火 水 木 金 土 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
- ヒント:calendar モジュールでは(ヨーロッパ式で)月曜日が最初にくるようになっているので、日曜日が最初にくるように設定する。
- 月のカレンダーを行列に入れ、整形して出力する。
解答は、"メール":mailto:tkikuchi+ci2006@is.kochi-u.ac.jp?Subject=11_Function で送ってください。
また,今回の演習の結果できたファイルはそのまま ~/python/11 に残しておいてください。評価の対象とします。