Python(パイソン)はGuido van Rossum氏により1991頃より開発されているプログラミング言語です。Pythonは煩雑さを排除し、非常に読みやすいコードを作成しやすく、学びやすい言語として有名です。この言語の名前は BBC のショー ``Monty Python's Flying Circus'' に ちなんだもので,不快な爬虫類(Pythonにはニシキヘビの意味がある)とは無関係です。
Pythonは完全で本格的なプログラム言語ですので、Mac用アプリケーションの作成も可能です。
また、非常に移植しやすい言語でもあり、Win、Mac、Unix、はもちろんWinCE、BeOSなどあらゆるプラッとフォームで動作します。またPalmOSへの移植プロジェクトも進行中で、いずれ移植されるはずです。現在のバージョンでは、オブジェクト指向も取り入れていますので、汎用性が高くなっています。
この移植性の高さはもともとPythonがMac環境で開発が始まった事に起因しているのかもしれません。初めてのPython環境はMac上で動作したのです。現在でもGuido氏の弟さんはMac版のデバッガー部分の開発に関係しています。この関係上、他の言語と比較してMac系文献が多いのもPythonの特徴ではあります。
バージョン1.5.2では不得意だった日本語の取り扱いも、バージョン2系ではユニコードなどの採用により比較的容易に多バイト文字を扱えるように成りましたので、これからPythonの活用部分がひろがっていくと思います。
Pythonを習得するのは非常に簡単です。そして、非常に高度なことができます。
Perlというあまりにも煩雑で、理解しがたい言語を反面教師としながらも、その便利な部分を積極的に取り込んできた結果が、現在のPythonに結実しています。
またPythonは非常に応用性が広い言語でもあり、C/C++言語による拡張、C/C++言語を拡張、どちらも可能です。つまりPythonを学んでからC言語を習得しても、それまで利用したPythonプログラムをC言語に組み込んでいくことが可能なのです。その逆にC言語でPythonの拡張モジュールを作成することも可能です。
PythonはPythonがインストールされていないマシンで動作するアプリケーションの作成も可能となっています。むろんその場合は、インストール先のマシン特有の問題がありますので、ある程度OS等に関しての知識は必要となりますが、それでもC言語でつくるよりはよほど簡単に作成できます。
そして最も重要なのはそのライセンスです。Pythonは無料で、しかも改変自由で、配付自由で、商用利用にも全く制限がありません。ほとんど使用に制限がないといっても過言ではないです。この言語を使わないのは損です!いちど使うとはまります。
ぼくは、全くプログラムを触ったことが無い人が、始めからC言語やJavaなどに挑んでは、すぐにプログラムが難しくって、やめてしまう例を見てきました。
ほとんどの場合プログラムが難しいのは、コンピュータというものを良く理解していないことが大きな原因です。昔はBasicなどの言語でコンピュータの基礎をしっかり学んでから、C言語などへと進んだようですが、現在の速度の速い時代では最初からC言語と言う場合も少なくないと思います。
しかし、それではどこかでつまずく事は明らかです。Pythonは他の言語に比較して、学習時間が短くてすみ、また応用性が広い言語です。
そもそもプログラムは、コンピュータを使ってどうやって楽をするかを追及するものです。楽をする努力を怠ってはいけません(言い切る(^_^;))。第一、楽しないと仕事の後にこんなサイト作れません。
パソコンでやる作業っていつも一定のことが多いと感じたことはないでしょうか。同じこと何度も繰り返すのは本当に嫌です。そういった部分をプログラムによって自動化すればずいぶん楽になります。また既存のソフトでは自分の使い方に会わないとかはいくらでもあります。
プログラムそのものを面倒だと感じるかもしれませんが、一度自動化されると、こんなに便利だったのか!って感動する部分もあります。また一度一つの言語を習得しておくと、他の言語が非常に習得しやすくなります。
Pythonを学んでおけば、必ずとっても愉しいプログラミング生活が送れると思います(^_^;)
Pythonの公式サイト(http//www.python.org/)から入手可能です。
またMacへPythonを移植したJack Jansen氏のサイト、
Jack's MacPython Page(http://www.cwi.nl/~jack/macpython.html)でも入手可能です。
詳細な解説が入手したい場合はhttp://www.python.org/doc/でPDF版、HTML版などいくつか入手できます。圧縮形式はZipとGZipですが、ZipはStuffIt Expander5以上なら解凍可能です。日本語に翻訳している方達もいます。
ここでの説明はPython1.5.2c1のMac版を利用しています。
ダウンロードしたものをStuffIt Expanderで解凍してください。
インストーラーをダブルクリックして、任意の場所にインストールしてください。インストール時ウィルス検知ソフトは止めておいたほうが無難です。
インストールは英語による指示ですが、たいした英語でもありませんので、簡単にできるはずです。インストール内容は以下の用になります。
内容は簡単に確認しておいてください。Mac版Pythonの解説はPython/Mac/Demoにあります。
Pythonのアイコンをみて喜ぶひとはマニアです(^_^;)。わからないひとはMonty Pythonとかで検索するか、レンタルビデオ屋とかでMonty Pythonを探すかしてください。
ではPythonを初めて触ります。「Python IDE」をダブルクリックして起動してください。以下の様な画面が出ます。
初期設定は必要ではありません。定番どうり「Hello Python!」をやってみましょう。
>>>print "Hello Python!"
といれて、改行します。
Hello Python!
と表示されます。
では次章より、「Python Tutorial」と「Python Reference Manual」およびその他の参考文献にしたがって、Pythonの説明をしていきます。
コンピュータというのは実際は、ONとOFFしか認識できないものです。ONとOFFは簡単にいえば、電源が入ってりるかいないかで表します。このON、OFFを1と0に割当、1と0のみで数字を表すのが2進法という数字のあらわしかたです。
大昔は、本当にコンピュータには沢山のON、OFFスイッチが付いていて、人間が回路を切断したり、つなげたりしてON、OFFを制御していたのですが、 IBM社がOS技術を開発した事によりON、OFFはプログラムがやってくれるようになりました。
それでも、コンピューターがON、OFFしか認識できないことは確かです。本来ON、OFFしか理解できないコンピューターにどうやって命令をつたえるかと言えば、本当は2進法を使った数字の羅列(機械語)でやるんですが、それだと人間にはほんとんどできません。そこでアセンプラ言語が開発されました。しかし、アセンプラでは機械語そのままな感じですので、かなり煩雑になります。
もっと、人間の言葉に近いプログラム言語として高級言語が登場しました。Pythonも高級言語の一つです。
高級言語にはインタプリタ型と、コンパイラ型が有るんですが、Pythonは一様インタプリタ型です。インタプリタ型は1行づつプログラムを解釈するので、実行速度が遅いのですが、開発速度は速いので、使い捨て系のプログラムには持って来いです。
ただし、Pythonの場合インタプリタ言語といってもすこし特殊な感じの言語解釈を行っていて、十分な速度を保持しますので、本格的なプログラムもできます。ただ、本当に速度が求められる部分はC言語などで拡張した方がよいと思いますが。
では、プログラムの話はこのぐらいにしてPythonの基本部分に入ります。
プログラミング言語はコンピュータで利用するため、利用可能文字が決まっています。一定の規定を守らないといけません。
変数の名前、リストの名前、関数の名前は必ず英数字である必要があります。また機種依存文字と呼ばれる文字、例えば丸の中に数字が入っているものなどは使ってはいけないことになっています。
基本としては、キーボートに印字してある文字意外は使ってはいけません。
またPython1.5.2では日本語文字の扱いに問題があります。バージョン2系では日本語の扱いがかなり改善されていますので、本格的に日本語を利用する場合はバージョン2系を使用してください。
Pythonの命令文は基本的に1行で、改行で終わります。ただ、どうしても長い命令文を書きたい場合は、円記号(\、英語フォントではバックスラッシュ\)を使うことで複数行に亘って一命令を書くことができます。
a="ここが長い文章・・・" + \
"2番目の文章"
ただし、3重引用符使用時は必要ではありません。
最も基本的かつ重要なことは、Pythonではプログラムの塊をインデントで表現するということです。インデント数はいくつでも良く、一塊が同じ行から始まっている場合、同じ塊として扱われます。
変数名、リスト名、関数名などの事を識別子と言いますが、これは英数字とアンダースコア(_)のみの組み合わせで頭の文字が英字であれば基本的に自由につけることができます。ただし、例外があって予約語は単独では使用できません。
予約語というのは、プログラムの命令として利用するもので、例えば、printとかwhileとかです。単独でなく、sumprintとか他の語と一緒の使用は問題有りません。
また、大文字と小文字は別の文字ですので、fooとFOOは別です。だた、あまりこういう使用は良くないと思いますが・・・。識別子の場合は、_意外の記号は利用できません。また_が頭に付く変数は普通特別な事に利用しますので、あんまり利用しないほうがいいです。
なるべく分かりやすく、かつ長めに名前はつけておきましょう。ぼくは識別子をつけるために常に和英辞典をもってるぐらいです(^_^;)
識別子の付け方は、仕事などの場合命名規約があって、どういうルールでつけるか基本的に決まってくるのですが、自分でプログラムする場合も命名規約は決めておいたほうが、プログラムの汎用性・再利用性がひろがります。命名規約に関しては、別の機会に説明したいと思います。
コメントというのは、プログラム内で書く注釈です。プログラムそのものには全く影響がない部分ですが、人間が読む時最も重要な部分になります。ぼくなんかは、自分で書いたプログラムでも時間が経つとなにやってるかわからなくなるので(^_^;)、趣味でプログラムする時はコメントいっぱい書いちゃいます。
コメントのおおすぎは良くないですが、コメントが適切に書いてあるプログラムは汎用性、再利用性が高くなります。
コメント読めばプログラマーの力量が結構わかる場合もあります・・・。
Pythonにおけるコメントは#(NUMBER SIGN:ナンバー、ASCII/UNI=23/0023、JIS/UNI=2174/FF03)です。#からその行の最後までがコメントアウトされます。多数行にわたるコメントはいちいち#記号を書く必要があります。(余談ですが♯シャープ記号と#ナンバー記号は違います)
>>> print "foo" #ここからがコメント
本格的にプログラムをやる気があるならコメントは重要です。
ここではPythonの文法を細かく説明しません。とにかく手を動かしてみてください。最初は意味なんてわからなくて良いですが、自分なりにどうしてそうなるとか考えてみてください。
プログラムでは計算は頻繁にでてきますので、まずは計算から。計算式に使うのは普通は+、-、÷、×、=などの記号です。この記号を演算子と呼びます。
Pythonなどのプログラミング言語では、演算子は普通の数学と違いますので、注意してください。足し算、引き算は同じ+、-ですが、かけ算は*、割り算は/で表します。Python IDE上では改行することで計算が行われます。
取りあえず素直な例を挙げておきます。
>>>2+2
4
>>>#この記号以後の文はコメント扱い(プログラム上は無視される)
>>>(50-5*6)/4 #カッコをはずすと答えは・・・
5
>>>5/2 #注意:この場合小数点にならない
2
コメント部分(#以後の文)は実際の場合書く必要はありません。
このあたりは記号が違うだけで小学生レベルです。もう少し高度なことをする場合は変数を利用します。
変数というのは、取りあえず値を入れとく場所です。変数に数字を入れるには"="を利用します。ここも普通の数学と違いますので注意してください。
>>>width = 20 #widthに20を入れる
>>>height = 5*9 #heightに5*9つまり45を入れる
>>>width * height #widthとheightを掛ける20*45
900
変数の中身を表示するのも可能です。
>>>width
20
また、変数には一度に値を入れることも可能です。
>>> x = y = z = 0 # x と y と z をゼロにする
>>> x
0
>>> y
0
>>> z
0
変数に関して説明します。変数の概念は、箱の様な物です。
例えば、>>> A=moji
とした場合は以下のようになります。
変数とは「将来的に変更される可能性がある値」のことです。つまり、もしかしたら明日変更されるかもしれない値です。 もし、プログラムの中で自分の年齢を1000回利用している場合、年齢が変わったら1000カ所修正するのは絶対間違いが生じます。変数なら1ヶ所変更するだけで、全部変更できます。
変数の中には常に一塊のものしか入れません。
>>> A=moji
>>> A=kanji
>>> A
kanji
となります。
たとえば、今I=10、J=12、という値があって、この値を交換したい場合、I=Jってするとどうなるかわかりますか??。Iの値が消えちゃいます。
こういう場合も変数を利用して、
>>> temp=I
>>> I=J
>>> J=temp
これで、IとJの値が変更できます。
変数の利用方は主に上記の2パターンになります。
・いつか変更になる値の格納
・一時利用の値を格納
計算は小数点の利用も当然可能です。式に含まれる値のいずれかが小数点数であれば答えは小数点として表示されます。ちなみに小数点が含まれる数字は正式には浮動小数点数と呼びます。
>>> 4 * 2.5 / 3.3
3.0303030303
>>> 5.0 / 2
2.5
複素数の計算もできます・・・・。複素数はjまたはJをつけますが、数学の知識になりますので説明はしません(説明しだすと終わらん^_^;)。(1+2j)*(1-2j)の答えは、5+0j(つまりは5)です。
計算において直前の答えは_という変数に自動的にはいっています。
>>> 5.0 / 2
2.5
>>> _
2.5
>>> _*2
5.0
>>> tax = 17.5 / 100
>>> price = 3.50
>>> price * tax
0.6125
>>> price + _ #3.50 + 0.6125
4.1125
>>> round(_, 2) #round(a,b)はaの数字を小数点b桁にする
4.11
ここでround(_, 2)というのがでてきますが、これは関数と呼びます。round()はPythonに最初から組み込まれています。このような関数を組み込み関数と呼びます。
関数に関してはもう少し後ろで練習を書きます。
0で始まる数字を8進数、0x(または0X)で始まる数字を16進数として利用できます。
数字だけでなく、文字の扱いも簡単です。文字は通常"(ダブルクゥォート)や'(シングルクゥォート)で囲む事によって文字として認識されます。
これは変数との区別のためでもありますので、注意してください。
>>> 'spam eggs'
'spam eggs'
>>> 'doesn\'t' #'の中で'を使うときは\'とする
"doesn't"
>>> "doesn't"
"doesn't"
>>> '"Yes," he said.'
'"Yes," he said.'
>>> "\"Yes,\" he said." #"の中で"を使うときは\"とする
'"Yes," he said.'
>>> '"Isn\'t," she said.'
'"Isn\'t," she said.'
\(円記号)をつけると特殊な文字をエスケープ(プログラムに普通の文字として認識)させることができます。
長い文章で改行をいれながら行い対場合は以下のようにします。ここでの\nは改行をあらわす文字です。
hello = "This is a rather long string containing\n\
several lines of text just as you would do in C.\n\
Note that whitespace at the beginning of the line is\
significant.\n"
print hello
でhelloの中身が表示されます。Mac版では、改行が「/012」という数字として現れてしまいます。
通常エスケープ文字は不便ですので、3重クゥォート("""または''')で挟むことでエスケープ文字やクゥォートを必要とせずに文字を表示することができます。
print """
Hello World.
This is a rather long string containing
several lines of text just as you would do in C.
Note that whitespace at the beginning of the line issignificant.
"""
これで長文であっても問題なく操作が可能になります。
文字列は + 演算子で連結させることができ, * 演算子で反復させることができます。
>>> word = 'Help' + 'A'
>>> word
'HelpA'
>>> '<' + word*5 + '>'
'<HelpAHelpAHelpAHelpAHelpA>'
Pythonでは文字列から特定文字を抜きだす(スライスする)ときに添字を利用して行います。添字というのは、変数の後ろに[]の中にいれる数字のことです。Pythonではスライス記法、つまりコロンで区切った書式で添字を書きます。
注意点としては、Pythonでは1文字目の文字が0番だということです。プログラミング言語のほとんどは0から数字が始まりますので、これだけは覚えておいてください。
>>> word = 'Help' + 'A'
>>> word[4] #4番の文字を抜き出す
'A'
>>> word[0:2] #0番から2番の文字を抜き出す
'He'
>>> word[2:4] #2番から4番の文字を抜き出す
'lp'
>>> word[0:4]+"Bad" #スライス文字と文字列の連結
'HelpBad'
[2:4]と書いたとき、抜き出されるのは2番と3番の文字だけです。この点も十分注意してください。また連結を利用すると、おもしろいことができるかもしれません。
スライス添字には便利なデフォルト値(既定値、初期値)があります。 第一添字を省略すると,0 を指定したものとして処理されます。 第二添字を省略すると,最後の文字までとして処理されます。
>>> word[:2] # 最初の2文字
'He'
>>> word[2:] #2番から最後の文字まで
'lpA'
おかしな添字を指定しても問題なく処理されます。大きすぎる添字は文字列のサイズに置き換えられ、上限が下限より小さいときは空文字列が返されるようになっています。
>>> word[1:100]
'elpA'
>>> word[10:]
''
>>> word[2:1]
''
添字は負の数でもよいことになっています。その場合は右から数えることになります。
>>> word[-1] # 最後の文字
'A'
>>> word[-2] # 最後から二つめの文字
'p'
>>> word[-2:] # 最後の2文字
'pA'
>>> word[:-2] # 最後の2文字を除くすべて
'Hel'
注意すべきことは、1番右の文字が-0ではないということです。-0はプログラムでは0と同じになります。
>>> word[-0] # -0 は 0 と等しくあつかわれる
'H'
範囲外の負数のスライス添字は切り捨てられますが、 これを単一要素添字(スライス添字でない)にするとエラーになります。
>>> word[-100:]
'HelpA'
>>> word[-10] # エラー
Traceback (innermost last):
File "<stdin>", line 1
pybaseError: string pybase out of range
文字と計算を一緒にする場合、文字はクゥォートで囲み、計算を囲みません。また文字と計算の間にはコンマ(,)を入れます。
>>> print '3+4 = ', 3+4 #文字と計算の間に,を入れる!
3+4=7
>>> i = 256*256
>>> print 'The value of i is', i,'This is Good!'
The value of i is 65536 This is Good!
実際添字は文字その物をさしているわけではなくて、文字と文字の区切りを認識しています。
+---+---+---+---+---+
| H | e | l | p | A |
0---1---2---3---4---5
5---4---3---2---1
添字の概念はややコンピュータの知識を必要とするかもしれませんが、使っているうちに慣れてきます。
文字の大きさを取得したいときはlen() 関数を利用します。
>>> len(word)
5
添字を省略するのがいやな人は
>>> word[2:len(word)]
'lpA'
ということもできます。
他の言語に置いては文字の置き換えが可能な場合もありますが、Pythonではスライス文字の置き換えはできません。
>>> word[0:1] ="A" #エラーになる
Traceback (innermost last):
File "<input>", line 1, in ?
TypeError: object doesn't support slice assignment
リスト(配列)とは、複数の値をまとめて取り扱う手法の一つです。リストはかぎかっこに囲まれコンマで分けられた値 (項目) の並びとして書くことができます。概念としては以下の様になります。
取りあえず使ってみたほうが速いです。
>>> a = ['spam', 'eggs', 100, 1234]
>>> a
['spam', 'eggs', 100, 1234]
文字列の添字と同じで、リストの添字も 0 から始まります。 スライスできたり連結できたりすることも文字列と同じです。
>>> a[0]
'spam'
>>> a[3]
1234
>>> a[-2]
100
>>> a[1:-1]
['eggs', 100]
>>> a[:2] + ['bacon', 2*2]
['spam', 'eggs', 'bacon', 4]
>>> 3*a[:3] + ['Boe!']
['spam', 'eggs', 100, 'spam', 'eggs', 100, 'spam', 'eggs', 100, 'Boe!']
リストは文字列と異なり、内部項目の置換や演算(計算)が可能です。
>>> a
['spam', 'eggs', 100, 1234]
>>> a[2] = a[2] + 23 #a[2]にa[2] + 23をいれる、=の意味確認!
>>> a
['spam', 'eggs', 123, 1234]
単一項目指定でなく、スライスへの代入も可能です。 その場合リストの項目数を変化させることもできます。
>>> a
['spam', 'eggs', 123, 1234]
>>> # いくつかの項目を置換する
... a[0:2] = [1, 12]
>>> a
[1, 12, 123, 1234]
>>> # いくつかの項目を除去する
... a[0:2] = []
>>> a
[123, 1234]
>>> # いくつかの項目を挿入する
... a[1:1] = ['bletch', 'xyzzy']
>>> a
[123, 'bletch', 'xyzzy', 1234]
>>> a[:0] = a # それ自身 (のコピー) を先頭に挿入する
>>> a
[123, 'bletch', 'xyzzy', 1234, 123, 'bletch', 'xyzzy', 1234]
組込み関数 len() はリストでも利用可能です。この場合は項目数になります。
>>> len(a)
8
リストを入れ子 (ほかのリストを含むリスト)にすることも可能です。かなり複雑になっていますので、紙にでも書いて意味を把握してみてください。
>>> q = [2, 3]
>>> p = [1, q, 4] #pの中にqを含む
>>> len(p)
3
>>> p[1] # p[1]はqと同義
[2, 3]
>>> p[1][0]
2
>>> p[1].append('xtra') # appendは後記する
>>> p
[1, [2, 3, 'xtra'], 4]
>>> q
[2, 3, 'xtra']
組み込み関数append()は 指定位置に項目を追加(append)します。
例で p[1] と q が実際には同一の物(オブジェクト)を 参照していることに注意してください。オブジェクトの説明はもっと後でしますが、オブジェクト指向という、現在のプログラムの基本思考が含まれます。
タプルは直接変更ができないことを除きリストと同じです。
>>> a = ('spam', 'eggs', 100, 1234)
上書き禁止のリストだと思えばいいと思います。
マップというのは、他の言語では連想配列と呼ばれるものです。
たとえば、1番:リンゴ、2番:モモ、3番:ナシ・・・とかいう項目があったら場合、1番からリンゴを引きたい場合とかに利用します。
キーとしてはほとんどの項目(オブジェクト)が使えます。べつだん数字にする必要は有りません。{, } で囲み、 キーと項目(オブジェクト)の区切り記号は:(コロン)、区切り記号は , (コンマ)で表します。
>>> x = {1: 'One', 2: 'Two', 3: 'Three'}
>>> x[1]
'One' #インデクシング
>>> y = {'One': 1, 'Two': 2, 'Three': 3}
>>> y['One']
'1' #インデクシング
ここまでの説明ではぜんぜんプログラムらしくありません。もう少しプログラムらしいこともやってみます。
始めは関数の練習から書いてみます。
>>> def sum(a,b): #コロン:を最後につける
... print a #先頭の空白部分にはTabを必ずいれること!!
... print b
... print a+b
...
>>> sum(3,4)
3
4
7
かならず先頭のTabを入れてください。PythonではTabが入っていないと塊として認識されません。このTabをいれて文字をずらすことをインデントといいます。Pythonはプログラムの階層構造 (そのコードがどこに含まれるか)をインデントで示します。
例の場合、def sum(a,b):として定義するものが、
... print a
であることを示します。
... print b
... print a+b
もし
... print a
とかくと、print a+bだけ別扱いになってしまい、エラーになります。以後もTab文字がでてきます注意してください。Tabは明示しませんが、先頭空白ですので、かならず入れてください。
... print b
...print a+b
簡単に関数に関して説明します。関数と言うのは組み込み関数と、独自関数があります。いままででてきたlen()などは、組み込み関数で、もとからPythonに組み込まれているんですが、それだけでは足りない場合、独自に関数を作成することができます。
例に上げたのは非常に単純な例で、与えた数字を表示し、足した結果を表示するだけです。関数はdef 関数名(引数):で作成します。()の中に入れるのを引数(ひきすう)といいます。
プログラムの場合、何度も同じ処理を書く場合が少なくありません。そのたびに同じコードを書いていたら面倒くさいですし、絶対どこかで間違えます。関数を利用することで、同じ処理を何度も呼び出しても、1行ですみます。また、関数に機能を加えたり、削ったりすれば、プログラム全体が、簡単に変更できます。
関数に関しては後でもじっくり説明しますので、ここでは取りあえずなんとなく使えればいいです(^_^;)
プログラムでかなり重要なものは判断と繰り返しです。始めに判断から説明をします。
判断で最も多く利用されるのがIF文です。
>>> x=数字 #自分で好きな数字を入れてください
>>> if x < 0: #もしXが0以下だったら・・
... x = 0 #xに0を入れている
... print 'Negative changed to zero'
... elif x == 0: #上が違ってもしxが0だったら・・
... print 'Zero'
... elif x == 1: #上も違ってもしxが1だったら・・
... print 'Single'
... else: #それ以外だったら・・・
... print 'More'
...
if 判断、の形で、判断を行います。elifっていうのは、「〜でなくて〜だっらた」って感じです。説明を良く読むと気付くかもしれませんが、==なんてのがでてきます。これはプログラムでは=は代入の意味で使ってるので、等号の意味を表すときは==で表します。これが結構間違えやすいんですが、C言語とかもこうなってますので、注意してください。
つぎに繰り返し(ループ)の代表的な例を挙げておきます。ここで利用するのがフィボナッチ数列って奴です。フィボナッチ数列というのは最初の数字を0と1として、隣り合う数字を足して行く計算の事です。
例、0,1,1,2,3,5,8,13,…
この数列は計算を進めていくと、隣り合う数字の比率が黄金比率(1対1.6の最も美しい比率)になることが知られています。また、フィボナッチ数列にでてくる数字がほとんど自然界で利用されているという研究もあります。例えば、桜の花びらが5枚だとか、ヒマワリの種の右回り、左回りの数、などなど・・・ってことで、例として面白い数列ですね。
>>> # Fibonacci series: 二つの要素の和が次の要素を定義する
.. a, b = 0, 1 #初期設定
>>> while b < 10: #これがループの定義
... print b #インデント忘れちゃいやよ(^_^;)
... a, b = b, a+b #同時代入覚えてます?
...
1
1
2
3
5
8
ループに利用してるのはwhile文です。while 条件、で定義します。この場合b < 10まで中身を繰り返します。数字を変えてみるとなんとなくわかるかもしれません。
例えばb<1000とかすると、ずらーーーと数字がでます。毎回改行されると見にくい場合、
.. a, b = 0, 1
>>> while b < 1000:
... print b, #最後にコンマ(,)をつけると改行されない!
... a, b = b, a+b
...
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
数字を変えたり、計算式を変えたりするのも愉しいかも(^_^;)。
if文、while文を利用した関数をつくればそれは非常に強力なものになります。プログラムは基本的にこれらの組み合わせだけでほとんどの事ができてしまいます。取りあえずフィボナッチ数列の関数を示しておきます。
>>> def fib(n): # n までのフィボナッチ数列を書く
... a, b = 0, 1
... while b < n:
... print b,
... a, b = b, a+b
...
>>> fib(2000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597
if文に関しても自分なりに作ってみてください。
Pythonを終了するとここまでに打ち込んだものは保存されません。関数の保存に関しては次章。
Pythonを勉強していけば、おのずと巨大なスクリプトを作ることに成ると思います。そうすれば、以前作ったあの機能がもう一度使いたいという機会が確実に増えます。また、あまりに巨大なスクリプトはメンテナンスが困難に成りがちです。こういう場合に、各機能にスクリプトを分割した物を、モジュールと言います。
モジュールは関数ばかりでなく、実行文や、いろいろな物を分割して再利用性を高めるのに利用されます。
では、3章で作成した、フィボナッチ数列関数をモジュールにしてみます。
Python IDEのFileメニューからNewを選ぶと、Script作成ウィンドウが開きますので、以下のように書いてください。
def fib(n):
a, b = 0, 1
while b < n:
print b,
a, b = b, a+b
書き終わったら、FileメニューからSaveを選んでPython IDEと同じフォルダにfibo.pyという名前で保存します。
Python IDEが使いづらいと思う場合は、そのほかのテキストエディタでも問題なく作成できます。テキストファイルをPython IDEと同じフォルダにfibo.pyという名前で保存します。テキストエディタで作成した場合はインデントなどに十分注意してください。
Python IDEを立ち上げ、import fiboと書くとインポート(読み込み)されます。
外部読み込みの関数を利用する場合は、読み込んだファイル名と関数名をピリオードで繋げて指定しないと使えません。これは、同じ関数名が違うファイルにあったときのための安全策だと思ってください。
>>> import fibo
>>> fibo.fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
むろんIDE上だけでなく、ファイルから、別ファイルを読み込む時にも利用できます。
もし、一スクリプトのなかで、何度もfib関数を利用するなら、ローカル名に代入してしまえば簡単です。
>>> import fibo
>>> fib = fibo.fib
>>> fib(1000)
1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
これが成功した後、Pythonフォルダの中を見ると、fibo.pycというファイルが作成されていると思います。これはPythonのコンパイルファイルです。
Pythonではスクリプトの実行速度を速めるために、実行の時にスクリプトを自動コンパイルします。このコンパイルファイルは、OS依存の機能を使っていないかぎりほとんどの場合、全てのPythonが動く環境で動作します。
コンパイルファイルは内部のスクリプトを見ることが不可能ですので、もし自作のスクリプトを配付したいが、どうしても内部公開したく無い場合などにこのまま配付するという方法も存在します。
だたし、他の環境でも完全に同じ動作をするという保証はまったく有りませんが(^_^;)
Pythonにはあらかじめ幾つかの標準モジュールが用意されています。これはPythonフォルダのLibフォルダないに入っています。これらの詳細は「Python Library Reference」に書いてありますが、内容を開いて覗いてみるのが1番勉強になると思います。
結構思いつかない方法で、意外なことをしてたりしますし、自分のスクリプトを組むときの参考になると思います。