Pythonに挑戦(1)では、Pythonの導入について書きました。きょうは、Pythonプログラミングの第1歩である、IDLEというシステムを使ってみます。
Pythonが導入されていれば、IDLEは自動的に組み込まれているそうなので、Windowsのスタートメニューで(Windows11の場合は、スタートメニューの[すべてのアプリ]をクリック)、[Python3.12]を探し、右側のマークをクリックすると出てくるリストからIDLEを選んでクリックすると、IDLEシェルのウィンドウが出てきます。ここで、
2*1024
と入力すると、
2048
と出てきます。
2**1024
と入力すると、
3016028602530220424421062271578867838525126125874252890898307532480811172246863646685486789069132871854112712507200418582406770249989531589552959798883475511096677545853948017425342019529539590198394174553047792145043723038206885734470238620775335376572758801465612196212014773714996912064944617579072807182486470656
と出てきます。
そこで、Pythonに何かやらせてみたいわけですが、何ができるかを考えるために、Pythonの文法を一通り見渡していると、正直、Pythonがプログラミングの標準言語になるとはとても思えませんね。種々の処理ができるようですが、どの処理をとっても、複雑怪奇で、C言語なら単純素朴にできる(その代わり、自分で色々な処理を作らなければいけない)ことが、既に用意されている中からプログラミングすることになり、色々な前提を必要とするようで大変です。高校の先生の困惑する表情が目に浮かぶようです。そもそも、オブジェクト指向、ということからして、高校の先生の説明で生徒が納得できるんでしょうか?
とりあえず、簡単な住所録を作ってみようと思います。Cの構造体の代わりに、Pythonではclassを使えばよさそうです。
まず、name(名前)、postcode(郵便番号)、address(住所)、telno(電話番号)というメンバーを持つclassを、personという名前で作ってみます。IDLEを起動して、FILEメニューで[New File]をクリックしてファイル入力モードのウィンドウを開き、下記を入力します。Pythonでは、各行先頭の文字下げでプログラムの構造を示します。文字下げに注意してください。
class person:
def __init__(self, name, postcode, address, telno):
self.name = name
self.postcode = postcode
self.address = address
self.telno = telno
self.postcode = postcode
self.address = address
self.telno = telno
def show(self):
str1 = “氏名:{0} 住所:〒{1} {2} 電話{:3}”.format(self.name, self.postcode, self.address, self.telno)
print(str1)
print(str1)
まず、コンストラクタと言うのだそうですが、personという構造の1つのデータを作るときの手順を__init__という関数名で定義します。定義するときは、defをつけてmthod名を書きます。他のオブジェクト指向言語では、コンストラクタはnewというmethod名になっていることが多いのですが、Pythonの場合は、__init__というmethod名に決まっています。この関数(method)の最初の引数は、selfにします。こういう約束のようです。ここでは、2番目、3番目、4番目、5番目の引数として、self, postcode, address, telnoを指定します。Pythonでは、データの型を意識しないのですが、郵便番号など106-0033のように‘-‘が入ったり先頭が‘0’になったりするので、4つの引数はいずれも数値ではなく文字列です。
__init__()というmethodでは、住所録の1つのデータを作るときに、selfの、name, postcode, address, telnoに、引数で指定されたデータを格納します。C言語の構造体とは違って、最初から構造を作るのではなく、self.nameが出てくると、personという構造の中にnameというデータの格納場所を作ります。self.postcodeが出てくると、personという構造の中にpostcodeというデータの格納場所を作ります。
さらに、住所録を表示させるためのmethodとして、showという名前のmethodを定義します。このmethodも最初の引数はselfにします。ここでは、表示の仕方を制御することはせず、引数はselfのみです。表示は、str1という名前の文字列をprint()関数で表示させるのですが、
str1 = “氏名:{0} 住所:〒{1} {2} 電話:{3}”.format(self.name, self.postcode, self.address, self.telno)
として、str1に表示させるための文字列を設定します。“氏名:{0} 住所:〒{1} {2} 電話:{3}”の部分は、表示のさせ方を指定する文字列で、この文字列のmethodとしてformat()という関数を起動するので、文字列の後ろ(formatの前)に‘.’がついています。format() methodには4つの引数がついていますが、表示指定文字列の{0}, {1}, {2}, {3}が順番に4つの引数を指定しています。{0}がself.nameです。単に、“name”と書くのではだめで、“self.name”(selfというオブジェクトのnameという要素だという意味です)などとしなければいけないことに注意します。
さて、これで、personというデータ構造とmethodを定義したわけですが、このclass定義記述をファイルに格納することになります。
Pythonでは、プログラムの階層をそのままディレクトリ構造で管理します。最初は、目的ごとにディレクトリを作り、全部のモジュールを同一ディレクトリに入れておくのがよさそうです。そこで、pythonというディレクトリを作り、その中にaddressbookというディレクトリを作り、Fileメニューの中の[Save As…]をクリックして、\python\addressbookに移動して、ここに今作成したclass定義をadclass.pyという名前で格納します。
次に、このadclass.pyを使ってデータを作成し、住所録内容を表示させてみます。さらにIDLEのファイルメニューで[New File]をクリックしてファイル入力モードのウィンドウを開き、下記を入力します。
import adclass
a = adclass.person(“青木三郎“, “104-0751”, “東京都中央区銀座4-10-35″, “03-1234-5678”)
b = adclass.person(“鈴木七郎“, “244-0255”, “東京都大田区西六郷7-8-92″, “03-8765-4321”)
a.show()
b.show()
a = adclass.person(“青木三郎“, “104-0751”, “東京都中央区銀座4-10-35″, “03-1234-5678”)
b = adclass.person(“鈴木七郎“, “244-0255”, “東京都大田区西六郷7-8-92″, “03-8765-4321”)
a.show()
b.show()
最初のimport adclass(“.py”を付けません)はadclass.pyの記述を使ってプログラムを書く、ということを宣言します。これがないと、adclass.pyのpersonというデータ構造を使うことができません。person classの__init__というmethodの引数の記述に従って、name(氏名), postcode(郵便番号), address(住所), telno(電話番号)の順にデータを記述します(なお、住所氏名電話番号はもちろんデタラメです)。
但し、personというclassは、adclassで定義されたものを使うので、personの前に、“adclass.”を付けます。a = adclass.person(……で、personという構造のデータを1つ作ります。このデータをインスタンスと言います。aという名前のインスタンスが作られます。同様に、b = adclass.person(……で、personという構造の別のインスタンスをbという名前で作ります。
次のa.show()という関数は、aというインスタンスをpersonのshow()というmethodを使って表示させる、という意味です。b.show()とすると、bというインスタンスについて表示させることになります。このプログラムは、先の\python\addressbookというディレクトリに、adbook.pyという名前を付けて格納します。ここで、adbook.pyを編集しているウィンドウの[Run]メニューの中の[Run Module]をクリックすると、このプログラムを実行して、IDLEのウインドウに、
氏名:青木三郎 住所:〒104-0751 東京都中央区銀座4-10-35 電話:03-1234-5678
氏名:鈴木七郎 住所:〒244-0255 東京都大田区西六郷7-8-92 電話:03-8765-4321
氏名:鈴木七郎 住所:〒244-0255 東京都大田区西六郷7-8-92 電話:03-8765-4321
と表示されます。きょうは、ここまでにします。これだけでも、初学者にとっては大変です。
ブログTOP TOPページに戻る