ファイルにプログラムを作る

(菊地先生のオンラインテキスト2006年版に準拠)

ファイルにプログラムを作る

  • Python でいろいろな計算ができることがわかったが、計算の手順は Python を ^D で終了してしまうと消えてしまう。計算の手順を再利用するには、その手順をファイルに書いておくことが必要である。
  • また、math モジュールを import すると、π や √ などの数学関数を利用することができたが、このようなモジュールを自分で作ることができるだろうか?
  • 実は,モジュールは手順を記録したファイルなので,自分で手順をファイ ルに書いておくと、オリジナルのモジュールとして利用できる。
  • ここでは,3.2 プログラム(モジュール)ファイルの基本的なところを学ぶ。
  • また、文字列も出てくるが、文字列演算などの複雑なことはまだ扱わない。

作業ディレクトリを作る

  • これからは、lessonごとに作業ディレクトリを作成し、その中で作業する。
  • まず、作業ディレクトリを作成しよう。

  • $ cd
    $ mkdir python
    $ cd python
    $ mkdir 02
    $ cd 02

単純な例

  • 次のプログラムを a.py というファイルに作成する。

    (テキストエディタ, vi , catのいずれを使ってもよいが、必ずpython/02の中に保存すること。)

  • (以下、ターミナルでの入力は黄色いコラム、ファイルへの入力は青いコラムで表示します。)
  • # -*- coding: utf-8 -*-
    print '四則計算'
    a = input('a の値を入れてください ')
    b = input('b の値を入れてください ')
    print 'a + b =', a + b
    print 'a - b =', a - b
    print 'a * b =', a * b
    print 'a / b =', a / b

Python プログラムの注意

  • 必ず行のはじめの桁から1文字目を入れてください。
  • Python では、行のそろえ方で「プログラムの構造」を判断しています。(非常に重要!!)
  • 今日の例の場合、行の始めに空白があるとエラーになります。
  • # -*- で始まる coding 行は日本語を含むときは必ず入れておいてください。

モジュールとして実行

  • Python を起動して、a (.py を除く) をモジュール名として指定して import すると、ファイルに書かれた手順を実行することができる。
  • >>> import a
    四則計算
    a の値を入れてください 123
    b の値を入れてください 456
    a + b = 579
    a - b = -333
    a * b = 56088
    a / b = 0
    >>>

再実行

  • 一度 import したモジュールを修正の後などに再実行する場合には, reload() する必要がある。
  • >>> reload(a)
    四則計算
    ...

python コマンドの引数に指定して実行

  • コマンドラインから実行するには、python コマンドの引数としてファイル名を指定ればよい。

  • $ python a.py
    四則計算
    a の値を入れてください 9876
    b の値を入れてください 543
    a + b = 10419
    a - b = 9333
    a * b = 5362668
    a / b = 18
    >>>

スクリプトにする

  • a.pyの第1行目に次のおまじないを入れて、ファイルに実行許可を与えると、python をコマンドラインに書かなくてもよくなる。
  • #!/usr/bin/env python

  • $ chmod +x a.py
    $ ./a.py
    四則演算
    a の値を入れてください 1234
    b の値を入れてください 567
    a + b = 1801
    a - b = 667
    a * b = 699678
    a / b = 2

文字列の入力

  • 次のようなプログラムを、 b.py というファイルに作成する。
  • #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    who = raw_input('お名前をどうぞ: ')
    print who, 'さん、こんにちは!'
  • 実行権を与えて,試してみよう
  • $ ./b.py
    お名前をどうぞ  TAKAHASHI
    TAKAHASHI さん、こんにちは!

文字列について

  • 「文字列」については、参考書では第5章を参照
  • input() と raw_input() の違い:

    とりあえず、前者は数値を入れるとき、後者は文字列を入れるときに使うと考えてください。

コマンド引数を使う

  • UNIX のコマンドのように、コマンドラインに書いた引数を使うには、次のc.py のように、sys.argvを参照する。

  • #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    # こんばんは
    import sys
    who = sys.argv[1]         #←一つ目の引数をwhoに代入する
    print who, 'さん、こんばんは!'

実行例

  • $ ./c.py TANAKA
    TANAKA さん、こんばんは!
  • 注:上のプログラム例では 、引数を入力するのにPython ライブラリにあらかじめ用意されている sys モジュールを import してその中の argv というものを利用している。
  • sys.argv のように '.' (ドット)で区切って指定する。 [1] の部分は、次回に学ぶリストの要素指定である。
    • sys.argv[1]は、コマンドの直後に入力された文字列を表します。
    • 3行目の import sysを忘れないように。
  • もう一つの例 下記のファイルをadd.pyとして作成してください。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 足し算 引数1(実数)と引数2(実数)の足し算を返す
import sys
a = float(sys.argv[1])
b = float(sys.argv[2])
print a, '+',b,'=',b+a
解説 

a = float(sys.argv[1])は、sys.argv[1]でコマンドの直後に入力された文字列を取得し、それを実数に変換(float(文字列)は、文字を実数に変換します)して、aに代入しています。
下記の例では2.4が実数値としてaに入力されます

$ ./add.py 2.4 3.5
2.4+3.5=5.9

問題

以下の問題をといて、解答(スクリプトと実行例 、1はスクリプト不要)をhonda@is.kochi-u.ac.jpにメールで送ってください。スクリプトは,メール本文に記入するとともに、添付ファイルとしてもつけてください(以降も同様の提出形式をとってもらいます)。作業はpython/02の なかで行うものとし、作成したスクリプトは残しておいてください(評価の対象とします)。
締め切り 12/10(木) 17:00

メールのサブジェクト: p2 kadaiとしてください。

1. int(x) は他の型のオブジェクト(例えば文字列) x を整数に変換する関数です。 また、float(x)はxが文字列や整数であった場合、実数に変換します。イン タラクティブモードで実際に使ってみなさい。
  • 実数 1.4を整数に変換 
  • 文字列4 ("4"で表現)を整数型に変換
  • 文字列4 ("4"で表現)を実数型に変換

2. 前回の課題で行った日本円からドルへの変換をするスクリプト(rate.py)を作成しなさい。その際、下記のような動作(換算後のドルを少数点以下切り捨て)をするように設計してくだ さい(ここで、太字が入力で、数値は例です。)

        $ ./rate.py
        為替レート(円/ドル)は:   91.8
                   変換したい金額(円)は?  10000.0
        変換後の金額は 108 ドルです
       
3. 同じく、日本円からドルへの変換をするスクリプト(rate2.py)を作りなさい。但し、数値はコマンドラインから引数として与えるようにしなさい。

    実行例
                  $
./rate2.py 91.8 10000.0
      変換後の金額は 108 ドルです