どんな言語なの?

Pythonの特徴として

などが挙げられますが、プログラミングをやったことのない方にはいまいちピンとこないかもしれませんね。 それでは、Google、Microsoft、Yahoo!、Youtubeなどで使用されていると聞いたら、少しは興味がわいてきませんか?

Pythonはもともと教育用に開発されたこともあって、初心者の方にも覚えやすく、それでいて専門家も満足させる奥の深い言語です。 はじめてのプログラミング言語にぜひどうぞ!

やってみたい! でもどうすればいいの?

それではPythonをインストールしましょう。以下ではWindows XPを想定して解説していきます。

まずはPython Japan User's Groupから「ダウンロード」、 「Python標準リリース」に進み、python-2.5.msiをダウンロードして実行し、インストールしてください。 標準では「C:\Python25」にインストールされるはずです。

次に、Pythonをインストールしたフォルダへパスを通します。

パスの設定が完了したら、パスが通っているか確認しましょう。コマンドプロンプトを起動し、

python --version

と入力してエンターを押してください。

Python 2.5

と表示されれば成功です!

環境変数の設定が怖い方はもともとの変数値をメモ帳にでも貼り付けて保存しておきましょう。何か間違いが起きても戻せます。

インストールしたよ! パスも通したよ!

スクリプトファイルを作ろう!

それでは最初のスクリプトを記述しましょう!
メモ帳を開き、

print 'Hello World!'

と記述してhello.pyと名前を付けて保存します。場所は「C:\MyPython」にしておきましょう。コマンドプロンプトを起動し、

cd C:\MyPython

と入力してエンターを押してください。続いて、

python hello.py

と入力してエンターを押してください。

Hello World!

と出力されましたか? おめでとうございます! 初めてのプログラムは正常に動作しています!

対話型シェルを使おう!

Pythonにはちょっとしたテストや計算に便利な対話モードがあります。コマンドプロンプトを起動して、

python

とだけ入力して実行してください。対話型モードが起動し、

>>> _

というユーザの入力待ちの状態になります。

>>> 3+5

と入力してみましょう。キーを押すのは「3+5」だけです。

8

と表示されて、また

>>> _

という入力待ちの状態になりました。続いて

>>> x = 10

と入力しましょう。これは「xに10を入れる」という意味だと考えてください。 今度は何も表示されずに入力待ちになりましたね。

>>> x

と入力しましょう。

10

と表示されました。xの中身が表示されたわけです。今度は

>>> x + 10

と入力してください。

20

と表示されました。ちゃんと、xの中身と10を足した答えが返ってきます。ではもう一度

>>> x

と入力してみてください。表示は

10

のままです。先ほどはx+10の結果を返すだけでした。xの中身自体を変更するには「=」で代入しなければならないので、

>>> x = x + 10

と入力することでxに10を足すことができます(「=」は代入を意味するということをよく理解して下さい。恒等式ではないのでこの式は正しいのです。)。ではさらにもう一度

>>> x

と入力してみましょう。

20

と表示されるはずです。 対話型モードは

>>> exit()

と入力するか、Ctrl+Zを押すかすると終了します。

Idleを使いこなそう!

PythonにはIdleという無料のエディタがついています。 スタートメニュー → プログラム → Python 2.5 → IDLE を開いてください。コマンドプロンプトでpythonと打ったときと同じようなウィンドウが出てきます。そうです、対話型シェルです。 次にメニューボタンの「File」から「New Window」をクリックしてください。メモ帳のような真っ白なウィンドウが出てきます。そうです、メモ帳です。 実際にプログラムを行う時にはこのメモ帳モドキにガリガリ書いて、テストしたい時は対話型シェルを使います。 このメモ帳モドキにプログラムを書いてセーブしたら、メニューの「Run」から「Run Module」を選んで実行できます。 セーブする時は拡張子を「.py」とすることに注意してください。 ためしに上に書いてある簡単なプログラムをIdleでやってみましょう。

Idle使いづらいよ!

Idleがお気に召さない諸兄は統合開発環境(IDE)を使いましょう。

初歩でいいから教えて!

それでは、入門サイトや書籍が読める程度の知識を身につけていきましょう。 たくさんコードが出てきますが、 特に指示のない限りは対話型モードでもスクリプトファイルの実行でも結構ですので、 実際に動かしながら覚えてください。

また、コツの一つとして、「よくわからなくてもとりあえず先に進む」というものがあります。 そのときわからなくても、あとになると「なんだ。こういうことだったのか」となるものです。 初めてなんですから、最初はよくわからなくて当然です。 あとになって必要になったらもう一回詳しく調べてみれば良いのです。 せっかくプログラミングを始めたんですから、楽しまなきゃ損です。気楽にやってみましょう!

画面に出力しよう!

Pythonには、もっとも手軽な出力としてprintがあります。

print 3

とだけ記入したスクリプトファイルを作成し、実行してみましょう。 コマンドプロンプトに

3

が表示されます。3の部分を'Oh, I am printed.'に変えて実行してみましょう。

Oh, I am printed.

と表示されます。続いて、対話型モードでも同様に入力して見ましょう。 同じく、3、Oh, Iam printed.と表示されましたね。

コメントを入れよう!

プログラミング言語には独自の文法があります。 なるべく人間にもわかりやすいようになってはいますが、それでも大規模なコードや複雑な処理をしているコードは人間には意味が通じにくいです。 そんなときにはコードにコメントを入れることで理解しやすくなります。

Pythonでは、#の後ろからその行が終わるまでがコメントになります。コメントはPythonからは完全に無視されます。例えば、

#Yes, I want to print 2, not 3.
print 2 # print 3

は、

2

とだけ表示されます。#の後ろはコメントなので、無視されるからです。

コードの表記について

以降、コード例の中でコマンドプロンプトに出力するときはたいていprintを使います。 そのとき、たとえば

print 3 + 7 #=>10

等とコメントが書いてある場合、=>の右側はprintを実行したときに画面に出力される値です。 自分で試すときは、コメントは入力しないで結構です。 以降頻繁にこの表記が出てきますので、覚えておいてください。

データを理解しよう!

Pythonには基本的なデータとして、数と文字列があります。 どちらも言葉通りの意味です。 それぞれ見ていきましょう。

数には整数や少数があります。複素数もありますが、ここでは触れません。

print 3    #整数
print 3.14 #小数

足す引く掛ける割るはそれぞれ+-*/で計算できます。%は整数同士の割り算の余り、**は累乗です。

print 3 + 7     #=>10
print 12 - 8    #=>4
print 4.6 * 5   #=>23.0
print 8 / 5     #=>1                  整数同士の割り算は結果も整数
print 8 % 5     #=>3                  8 ÷5 = 1 余り 3
print 8.0 / 5   #=>1.6000000000000001 整数と小数だと結果は小数
print 7.5 / 2.5 #=>3.0
print 2**3      #=>8                  2の3乗。2×2×2

8.0÷5は1.6のはずなのになんだか半端な数字になっていますが、Pythonの小数の実装によるものです。

文字列

文字列はその名の通り文字の連なりです。 文字をシングルクオート(')かダブルクオート(")で囲むと文字列になります。

print 'Single Quote String' #=>Single Quote String
print "Double Quote String" #=>Double Quote String

です。文字列の中にシングルクオートを含めたい場合、ダブルクオートで囲みましょう。逆も同様です。

print "I'm here!"                  #=>I'm here!
print '"Moe" is a deep thought...' #=>"Moe" is a deep thought...

文字列にはほかに生の文字列や3重クオートの文字列がありますが、ここでは触れません。

特殊な文字としてエスケープシーケンスというものがあります。 エスケープシーケンスは「\」に続く記号または英字で表現され、 主に画面に表示できない改行やタブなどを文字列に埋め込むために使います。 例えば、改行は「\n」、タブは「\t」で表します。

print 'Hello!\nHello!\nHello!'

で、

Hello!
Hello!
Hello!

と表示されます。他にもいろいろなエスケープシーケンスがあります。

文字列も足し算、掛け算ができます。 足し算は文字列の連結、掛け算は文字列の繰り返しになります。

print 'Hello ' + 'World!' #=>Hello World!
print 'Ooops!' * 3        #=>Ooops!Ooops!Ooops!

日本語もおそらく使用できるはずです。対話型モードの場合はそのまま

print 'こんにちは世界!' #=>こんにちは世界!

です。スクリプトファイルで日本語を使用したい場合、utf-8を用いるのが楽です。 ファイルの先頭に

# -*- coding: utf-8 -*-

とコメントを書いておくと、Pythonはファイルがutf-8で書かれているものとして処理してくれます。 もちろん、ファイルをutf-8形式で保存しておく必要があります。 さらに、日本語の文字列を使用するときは文字列の先頭にuをつけます。 これは「この文字列はユニコードだよ」とPythonに指示するためのものです。 このような文字列をユニコード文字列と呼びます。

# -*- coding: utf-8 -*-

print u'こんにちは世界!'
print 'こんにちは世界!'

と記述したファイルをutf-8形式で保存し、実行してみましょう。

こんにちは世界!
縺薙s縺ォ縺。縺ッ荳也阜・

と表示されるはずです。uを忘れると不思議な文字列が出力されます。 スクリプトファイルで日本語を使いたい場合、先頭のコメントとユニコード文字列を忘れないでください。

変数を理解しよう!

いままではデータをほぼそのまま表示しているだけでした。 しかし、計算した値をとっておいたり、ユーザからの入力を受け取ったりすることを考えると、何かデータを入れておくものが欲しくなります。 この、なんらかの値を入れておくためのいれもののことを変数と呼びます。 変数は名前をつけて、何かを入れることで勝手に作成されます。 変数に何かを入れることを代入と呼びます。代入の記号は「=」です。

x = 10
print x #=>10

確かにxに10が入っています。「=」はあくまで「右のものを左のものに入れる」のであって、等号ではないことに注意してください。 なので、

x = x + 10
print x    #=>20

といった記述も可能です。数だけでなく、文字列を入れることも出来ます。

x = 'Oh, I am in variable x.'
print x                       #=>Oh, I am in variable x.
print x + ' Yeah!'            #=>Oh, I am in variable x. Yeah!

変数には大抵のものが入れられます。もちろん、新しい変数をつくることだってできます。

width = 10
height = 30
area = width * height
print  area           #=>300

では、まだ作っていない変数を出力しようとするとどうなるでしょうか。

print madanai

実行すると、以下のようなエラーが出ます。

NameError: name 'madanai' is not defined

そもそもまだ作られていない変数の中身を表示させようとしても、Pythonは困ってしまうわけです。

madanai = 'Variable "madanai" already exits.'
print madanai                             #=>Variable "madanai" already exits.

今度は表示できました。

データ構造を使ってみよう!

たくさんのデータをまとめて管理したい場合、変数だけでは難しいです。 例えば、あなたが先生で100人分の生徒の成績を管理するソフトウェアを作成したいとしましょう。 そのとき、100人分の成績を格納するために100個の変数を用意するというのはさすがに難しいでしょう。 たくさんのデータをまとめて格納したいときのために、Pythonには予めいくつかのデータ構造が用意されています。 ここではリストと辞書というふたつのデータ構造を簡単に使ってみましょう。

リスト

リストはもっとも基本的なデータ構造です。 たくさんのデータが並んでいるような構造をしています。 カンマ(,)区切りのデータを角括弧([])で囲むことでリストを表現できます。

x = [10, 5, 8, 6]
print x           #=>[10, 5, 8, 6]

リストに入っているデータ一つ一つを要素といいます。 インデックスを使うことで、各要素を利用できます。 インデックスとは、「何番目の要素か」をあらわす整数です。例を示します。

print x[0] #=>10            xの0番目の要素は10
print x[3] #=>6             xの3番目の要素は3
x[2] = 7                    xの2番目の要素を7に書き換える
print x[2] #=>7
print x    #=>[10, 5, 7, 6]

インデックスは0番目から始まることに注意してください。 xには4つの要素がありますので、有効な正のインデックスは0から3になります。 「正の」と言いましたが、負の数も使えます。

print x[-1] #=>6
print x[-4] #=>10

リストは変数同様、数だけでなく文字列やその他のものも入れられます。 また、いろいろな要素を混ぜることもできます。

x = ['dog', 'cat', 'cow', 'pig', 'bird']
y = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]     #リストの要素としてリストを持てます
z = ['pen', ['book', 5], 3.2]             #いろいろな要素を持てます

インデックスを使って表示したり代入したりしてみましょう。

print y[1]           #=>[4, 5, 6]
print y[0][1]        #=>2             yの0番目である[1, 2, 3]の1番目
print z[1]           #=>['book', 7.1]
z[1] = 'bird'
print z[1]           #=>bird

リストが持つ要素の数(リストの長さ)はlenで得られます。 lenはlengthの略です。

x = [0, 1, 2, 3]
print len(x)     #=>4

インデックスが0から始まることから、あらゆるリストにおいて有効な正のインデックスは0からlen(リスト)−1となります。 では、有効でないインデックスを指定するとどうなるのでしょうか。

print x[10]

以下のようなエラーがでます。

IndexError: list index out of range

インデックスが範囲外だと怒られてしまいました。注意しましょう。

空のリストを作成することもできます。

x = []
print x      #=>[]
print len(x) #=>0

空なので長さは0になります。 空のリストなんて何の役に立つの?と思うかもしれませんが、次節の便利な機能と組み合わせることで色々な処理ができるようになります。

リストの便利な機能

さて、今まではリスト内の要素を直接記述していました。 それでは変数をいくつも用意するのと、「記述の大変さ」と言う意味ではあまりかわりません。 リストには追加や削除のための機能が用意されています。 この節で学ぶ機能と、次項で学ぶ処理の流れを変える手段を組み合わせることで、 冒頭で述べた「たくさんのデータを処理する」という目的を達成できます。

まず、追加や削除の機能を見ていきましょう。まずはリストを用意します。

x = [1, 2, 3]

リストのappendメソッドを用いることでリストに要素を追加できます。 突然「リストのappendメソッド」などと言われても意味がわからないと思いますが、 意味はおいておいて、やり方だけに注目してください。

x.append(4)
print x      $=>[1, 2, 3, 4]
x.append('cat')
print x      $=>[1, 2, 3, 4, 'cat']

このように、「リスト.append(追加したいデータ)」でデータを追加できます。 途中に追加したい場合はリストのinsertメソッドを利用します。 「リスト.insert(インデックス, 追加したいデータ)」でインデックスの位置にデータを挿入します。

x = [0, 1, 2, 3]
x.insert(2, 1.5) #2番目に1.5を挿入
print x          #=>[0, 1, 1.5, 2, 3]

2番目が1.5になり、今まで2番目だった2が3番目に、同様に以降の要素も一つずつ後ろにずれていますね。 削除する機能もあります。「del 要素」でその要素を削除できます。delはdeleteの略です。

del x[2]
print x  #=>[0, 1, 2, 3]

xの2番目の要素にdelを適用した結果、先ほど挿入した1.5の要素が削除されました。

リストの非常に便利な機能としてスライスがあります。 インデックスの代わりに範囲を指定することで、リストの一部を抜き出すことが出来ます。 この機能をスライスと呼びます。 例を挙げましょう。

x = [0, 1, 2, 3, 4]
print x[1:4]        #=>[1, 2, 3]        1番目から3番目まで
print x[0:len(x)]   #=>[0, 1, 2, 3, 4]  0番目からlen(x)-1番目まで、つまりもとのリスト
print x[3:3]        #=>[]               終わりが初めより前の場合は空のリスト
print x             #=>[0, 1, 2, 3, 4]  

このように、「リスト[始めのインデックス, 終わりのインデックス]」で始めのインデックスから終わりのインデックスの一つ前までを抜き出します。 リストのスライス特有の動作として、スライスへのリストの代入があります。 単純に、スライスした部分が代入したリストで置き換わります。 言葉では伝わりにくいかもしれません。例を見てみましょう。

x[1:4] = [10, 20, 30] #[1, 2, 3]を[10, 20, 30]で置き換える
print x               #=>[0, 10, 20, 30, 4]
x[4:4] = [1, 2, 3]    #4番目の位置に[1, 2, 3]を挿入する
print x               #=>[0, 10, 20, 30, 1, 2, 3, 4]
del x[1:4]            #=>[10, 20, 30]を削除
print x               #=>[0, 1, 2, 3, 4]

初めのうちはわかりにくいかもしれませんが、なれてくると非常に便利です。

辞書

辞書はキーと値の組を格納するためのデータ構造です。 例えば国語辞典には、単語とそれに対する説明がたくさんあります。 この場合、単語がキー、説明が値となります。 辞書はコロン(:)で組にしたキーと値のペアをカンマで区切り、中括弧({})で囲むことで記述できます。

x = {'cat':'nya-', 'dog'|'wan'}

作成した辞書はキーを指定すると値を返します。

print x['dog'] #=>wan

リストの場合有効な範囲外のインデックスを指定するとエラーがでました。 辞書では、代入に限っては存在しないキーを指定しても大丈夫です。

x['one'] = 1
print x['one'] #=>1

ですが、存在しないキーの値をいきなり取り出そうとすると怒られます。

print x['two']

を実行すると、

KeyError : 'two'

と表示されます。

これまで見てきたように、辞書のキーにはたいていの場合文字列が使われますが、数字(や、このチュートリアルでは触れていませんがタプルというデータ構造)も使用できます。 値は変数に入れられるものならなんでも結構です。つまり、ほとんどなんでも入れられます。

空の辞書も作成できます。lenで長さを計ることもできます。

print x      #=>{'one': 1, 'cat': 'nya-', 'dog'| 'wan'}
print len(x) #=>3 
x = {}
print len(x) #=>0

まとめ

本項では二つのデータ構造を学びました。 とりあえず、データ構造を使えばデータをまとめて管理できることはわかったでしょうか。 次項からは、これまでに学んだ変数やデータ構造をどう処理していくかを学んでいきます。

処理の流れを変えよう!

これまでの例ではコードはただ順番に実行されるのみでした。 前項の冒頭の「自分が先生だったら」の例を思い出してください。 あなたは100人の生徒の成績管理ソフトウェアを作成したいのでしたね。 このとき、生徒の成績の平均を求めたいとしましょう。 100人のデータは配列scoresに入っています。

total = scores[0] + scores[1] + scores[2] + ... + scores[99]
average = total / len(scores)

こんなふうにやっても求められることは求められますが、いくらなんでも100回足し合わせるのは面倒です。 また、60点以上なら合格、80点以上なら優秀などというように、点数ごとにグループ分けしたいとしましょう。 これを実現することは、今まで学んだ知識だけでは難しそうです。

本項では、上記のような処理を実現する、分岐繰り返しについて学びます。 あわせて、条件についても簡単に学びます。 これらの機能をおぼえるとぐっとプログラムらしくなってきます。頑張りましょう!

for文

for文は前項で学んだリストや辞書などの中身に順にアクセスするための構文です。

for 要素を入れる変数 in データ構造:
    処理

という風に記述します。処理の前にインデント(字下げ)があることに注意してください。 例えば、リストの各要素の合計を計算したい場合は以下のようになります。

xs = [0, 1, 2, 3, 4]

total = 0
for x in xs:
    total = total + x
print total           #=>10

対話型シェルで実行する場合、

>>> for x in xs:
...     total = total + x
...
>>> print total

という具合に、改行のみの行でfor文の終わりを指示します。

total = 0;
for x in xs:
    total = total + x
    print total

と記述すると、print文がfor文の処理に含まれるため

0
1
3
6
10

と繰り返しごとの結果が表示されます。 このように、Pythonではインデントが非常に重要です。

辞書についても同様にfor文で順にアクセスできます(ただし、どういった順序かは決まっていません)。 ただし、辞書の場合はキーに順次アクセスします。

pets = {"dog" : 5, "cat" : 2, "pig" | 4}
for pet_type in pets:
    print "There are", pets[pet_type], pet_type + "s"

で、

There are 4 pigs
There are 5 dogs
There are 2 cats

と表示されます。pet_typeに入るのは各キーとなります。 また、辞書のkeysメソッドを使うことでキーに、valuesメソッドを使うことで値に、itemsメソッドを使うことでキーと値のペアに順次アクセスできます。

for pet_type in pets.keys():
    print pet_type

for pet_count in pets.values():
    print pet_count

for pet_type, pet_count in pets.items():
    print pet_type, pet_count

を実行してみましょう。一番下のfor文で、要素を入れる変数がキーと値の二つあることに注意してください。 itemsメソッドはキーと値のペアを順に返すため、受け取る変数も二つ必要なのです。

pig
dog
cat
4
5
2
pig 4
dog 5
cat 2

と表示されます。 値だけが欲しいときはvaluesメソッド、値とペアのセットが欲しいときはitemsメソッドを使うことが出来ます。

if文

if文は「もし〜だったら○○する」といった、条件による分岐を実現する構文です。

if 条件:
    処理

という風に記述します。 字下げは、タブでもスペースでもかまいません。さらに、if文に続けて、「そうでなければ××する」 といった処理をを実現するelse文、「そうでなければ、〜だったら△△する」という処理をを実現するelif(else ifの略)文があります。 例を挙げましょう。

x = 7
if x < 5:
    print 'x < 5'
elif x < 10:
    print '5 <= x < 10'
else:
    print '10 <= x'

で、

5 <= x < 10

と表示されます。xに代入する数字をいろいろ変えてみましょう。

「<」は数学の記号と同じです。 他に、「>」「<=」「>=」「==」なども使えます。 「<=」は≦のことです。 「==」は等しいかどうかの比較を表します。 条件部分の式については次節でもう少し詳しく説明します。

ちょっとした応用として、与えられた年がうるう年かどうがを求めるプログラムを書いてみましょう。 ある年が4で割れればその年はうるう年だというのは知っていますよね? うるう年の計算はもう少し複雑で、100でも割れればうるう年でないのです。 さらに、100で割れる年でも400で割れる年はうるう年です。 この条件をプログラムにして見ましょう。

year = 1984

if year % 400 == 0:
    print year, 'is leap year.'
elif year % 100 == 0:
    print year, 'is not leap year.'
elif year % 4 == 0:
    print year, 'is leap year.'
else:
    print year, 'is not leap year.'

判定の順番とelif文の使い方がポイントです。 yearに代入する数字をいろいろ変えてみましょう。 このうるう年を判定するプログラムは次節でもう少し簡単な形に書き直します。

続いて、for文と組み合わせてみましょう。

xs = [4, 5, 7, 8, 3, 2, 6, 1, 9, 0]
ys = []
for x in xs:
    if x < 5:
        ys.append(x)
print ys                             #=>[4, 3, 2, 1, 0]

数値の入ったリストxsの要素のうち、5未満のものをysに加えました。

条件

ここで、条件部分に書く式について簡単に説明しておきましょう。 式はなんらかの値を返します。 例えば「3 + 5」という式は3と5を足した値である8が返ってきます。 では、「==」や「<=」を使った条件式は、いったいなにを返すのでしょうか。 実は、条件式は式が成り立つ場合はTrue、成り立たない場合はFalseを返します。

x = 10 != 5 #xに10 != 5の返す値を代入
print x     #=>True。10は5ではありません!

「!=」は「==」の逆で、異なるかどうかを判定します。 10はもちろん5ではありませんので、xにはTrueが代入されるのです。

さて、続いて複雑な条件の書き方について説明しましょう。 andornotを使うことで、複数の条件式を組み合わせてより複雑な式を作ることが出来ます。 andは左右の式がどちらもTrueのときにTrue、orは左右の式のどちらか一方でもTrueならTrue、notはTrueならFalseに、FalseならTrueになります。 言葉だけではわかりにくいので例を示しましょう。

x = 20
10 <= x and x < 20     #=>False xは10以上20未満?
x = 15
10 <= x and x < 20     #=>True
x < 5 or 10 <= x       #=>True  xは5未満または10以上?
x = 8
x < 5 or 10 <= x       #=>False
not (x < 5 or 10 <= x) #=>True  xは5以上10未満?

最後の式では、orの計算を先に行うためにかっこで囲んであります。

if文の節で挙げたうるう年を求めるプログラムは、条件をうまく組み合わせることで簡単に書けます。 結局、うるう年は「4で割り切れてかつ100で割り切れない年、または400で割り切れる年」なので、

year = 1984

if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    print year ' is leap year.'
else:
    print year ' is not leap year.' 

と表せます。

条件についてざっと学びました。かなり急ぎ足だったので分かりづらかったかもしれませんね。 はじめのうちは複雑な条件を書いたり読んだりするのは難しいかもしれませんが、プログラミングを続けるうちにだんだん慣れていくものです。 気にせず先に進みましょう。

while文

処理をまとめよう!

もうちょっと教えて!

後で書く

参考になる本やサイトを教えて!


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS