Skip to content.

kagome.lab.tkikuchi.net

Sections
Personal tools
You are here: Home » Members » tkikuchi's Home » 授業 » 専門コア情報処理演習(2006) » 関数とモジュール
Views

関数とモジュール

Document Actions
このレッスンは ~/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)に作成しなさい。以下の実行例を参考にしなさい。
  • >>> 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 に残しておいてください。評価の対象とします。

Created by tkikuchi
Last modified 2007-02-16 21:28
 

Powered by Plone

This site conforms to the following standards: