Python入門
はじめに
詳細な学習をする前に、まずPythonプログラミングを実際に体験し、その雰囲気を感じてみましょう。
プログラムの入力と実行
まず、このページの左側のメニュー上部のPython Terminal (標準端末)をクリックするか、下のPython Terminal のスクリーンショットをクリックして、プログラム実行用のPyTermを開いてください。
つぎに、この下枠に示すプログラム例を参考にしてPyTermの左側のプログラム領域にコピー・ペーストするか書き写してください。このテキストでは、Pythonのプログラム例を以下に示すように、左側に行番号が付いた枠で示します。
print('Hello') # すべてのprint()でデータの表示後は改行される
print(5)
print(-7)
print(2.3)
print(3 * 4.5)
トラブルを避けるため、PyTermへのプログラムの入力時には、当面は半角文字のみを使用してください。漢字、仮名、括弧や空白文字などの全角文字がプログラムに混じると見つけにくいエラーの元となります。
プログラムの入力ができたら、PyTerm上部の緑色の実行アイコンをクリックしてください。プログラムが実行され、右側の文字出力領域に下の内容が出力されます。
Hello
5
-7
2.3
13.5
プログラムの実行が確認できたら、print()関数のカッコ内の文字列や数値、式を適当に変更して再度PyTerm上部の緑色の実行アイコンをクリックしてください。変更に応じた出力が右側の文字出力領域に追加表示されます。
プログラミング学習の注意点
プログラムを入力して実行する上での注意点をいくつか示します。
- PyTermの左側の領域にプログラムの入力を行う際には、基本的に半角文字の入力モードになっていることを確認してください。
- プログラム例が書かれた枠の右上に[Python]と表示されており、その下にマウスカーソルを移動させると、プログラム例をコピーできるアイコンが表示されます。それをマウスでクリックしてプログラム例をコピーし、PyTermの左側の領域にペーストすると簡単にプログラムの入力と実行確認を行うことができます。
- しかしながら、プログラミング能力を身に付けるためには、自分自身で何を入力しているか確認しながらプログラムを記述し、エラーがあれば間違いを修正し、プログラムが正しく実行できるところまで取り組むことが重要です。プログラム例を実行するためにコピー・ペーストをしても頭には何も残りませんので、コピーの利用は基本的には推奨しません。
- ただし、自分自身で入力して、いろいろと間違いを修正してもプログラムが動かない場合には、プログラム例をコピー・ペーストして正しいプログラムを動かした後に、自分のプログラムとテキストのプログラムのどの部分が異なるのかを確認して問題解決をするために利用してください。
- 実行確認や演習時にプログラムを記述する際には、プログラム例中に書かれている # 以降の部分は書き写す必要はありません。# 以降の部分は、コメント(注釈)といわれ、そのプログラムを人間(この場合は学習者である皆さん)が理解しやすくするために書かれているもので、コンピュータにとっては意味がありません。
- 最終的には、プログラム例を見なくても、プログラムの構成を考え、記述し、問題が発生すればそれを修正し、実行確認できるように取り組んでみてください。
テキストでは、プログラムの実行例は、プログラム例の下の行番号が付かない枠に表示されています。プログラムの実行環境がない場合でも、プログラムの動きを確認できます。また、プログラムを実行できる場合には、自分が入力して実行した結果と比較して確認してください。
エラーへの対処
プログラムを入力して問題なく実行されることはまれで、プログラムとして入力した文字列の綴り間違いや文法間違いなど、様々な要因でエラーが発生します。エラーが発生した場合にどのようなことが起きるかと、どのように対処するかを一つの例で確認してみましょう。
プログラミングを行っていると、ここに示す例以外にも、様々なエラーが発生します。皆さんはそれらのエラーの発生位置や原因を理解し、適切な修正を行う能力を身に着ける必要があります。エラーが発生したら、以下に示す例を参考にして、まずは落ち着いてエラーメッセージを確認し、問題の箇所と原因を特定し、適切な修正を実施する習慣を身に着けてください。
また、プログラミングでエラーが発生しても、コンピュータが壊れることはないので、エラーの発生を恐れることなくプログラミングに取り組んでください。
それでは、プログラムに入力誤りがある例を示します。以下のプログラム例では、printの最後の文字が誤ってyになっています。
priny(5)
上記のプログラムをPyTermの左側の領域に入力して実行すると、右の領域に実行結果ではなく、エラーメッセージが出力されます。出力されたエラーメッセージの最後の2行を抜き出して以下に示します。
File "<exec>", line 1, in <module>
NameError: name 'priny' is not defined. Did you mean: 'print'?
エラーメッセージは一般的に10行程度出力されますが、前半は発生したエラーに関する内部的な情報で、一般的な利用者には役立たない情報です。後半の2-4行に注目してください。エラーメッセージの [ line n ] という部分の n がエラーが検出された行を示しています。この行数を確認し、PyTerm左側に入力されたプログラムの該当行に注目してください。
エラーメッセージには、「priny は定義されていない、printの間違いでは?」と示されています。この例では、エラーが検出された行のprint()関数の綴りを修正すると、プログラムが正しく動くようになります。
データの利用
数値の利用
整数と実数
Pythonでは数値として整数と実数を利用できます。以下に、print()関数を使用した数値の表示例を示します。このプログラムでは、print()関数が1行目から順番に実行され、数値が順番にコンピュータの画面に出力されます。
print(5) # すべてのprint()でデータの表示後は改行される
print(-7)
print(2.3)
5
-7
2.3
print()関数はPythonに初めから組み込まれている表示機能で、カッコ内に指定されたデータを表示して改行します。このようなプログラミング言語に初めから組み込まれ、プログラミング言語の起動後すぐに利用できる関数群を組み込み関数と呼びます。
演算子の利用
Pythonで使用できる演算子のうち、加減乗除 [ + - * / ] の4つの演算子の利用例を以下に示します。
数学で利用する演算子と同様にPythonの演算子にも優先順位があり、その優先順位は括弧で変更することができます。
print(3+7)
print(3-7.8)
print(3*7)
print(3/7)
print(2-3*4.5) # *が-より先に計算される
print((2-3)*4.5) # 括弧が使用され-が先に計算される
10
-4.8
21
0.42857142857142855
-11.5
-4.5
変数の利用
変数を使用すると、データや計算で得られたデータに名前を付けて保存したり、データに付けた名前を使ってデータを使用できるようになります。
変数名
変数の名前として、英文字から始まり、空白などを含まず英文字か数字の並びで構成された文字列を使用できます。変数は、計算で使用する値や、式の計算などで得られた値を一時的に記録しておく(あるいは名前を付けて名前で使用できるようにする)ために使用されます。
変数名の例を以下に示します。変数名は、その用途やデータの種類がわかりやすい名前を付けることが望まれます。
- a, b, c, i, j, k, s, x, y, z
- lst, num, start, end, idx, index
- data1, str7
変数へのデータの代入
数値や式の演算結果は、代入演算子 [=] を使用して、変数に一時的に保存することができます。代入演算子は、これまでに学んできた数学における等号と同じ記号が使用されていますが、意味は異なります。
等号と代入演算子の違い
数学における等号 [ = ] は、その左辺と右辺が等価であることを示し、等価の状態を保ったまま移項などの操作をすることができます。等価であれば、左辺等辺は入れ替わっても、どのように変形することもできます。
一方プログラミングにおける代入演算子 [ = ](表現は数学における等式と同じ)は、右辺と左辺が等価であることを示しているのではなく、右辺の値もしくは計算式から得られた値を左辺の「変数」に保存する操作を示しています。このため、代入式の右辺と左辺に置けるものには以下の様な違い、制約があります。
- 右辺は単一の変数や数値などを含め、値を求めることができる式を置く必要がある。
- 左辺は右辺の値を記録できる変数を置く必要がある(数値や計算式は置けない)。
変数の使用法
また、変数は以下の様に使用されます。
- 変数には、代入演算子 [ = ] を使用して代入式の右辺で得られた値を保存することができます。
- 変数が数式の中で使用された場合や、関数の引数として使用された場合には、その時点で変数に保存されている値が取り出されて変数の値として使用されます。
- 変数は何度でも値を代入し、変更、更新することができます。
a = 3 # 変数aに3を代入(記録)する
print(a) # aに記録されている現在の値が表示される
hensuu = a * 7 # aに記録差ている現在の値に7を乗じた値を変数hensuuに代入する
print(hensuu)
hensuu = 100 # 変数の内容を変更している
print(hensuu) # 変更結果が反映されていることが確認できる
3
21
100
代入エラー
代入演算子の左辺は変数でなければなりません。
a + 1 = 3 # エラーになる
上記のプログラムを実行しようとして出力されるエラーメッセージの最後の4行を抜き出して以下に示します。
File "<exec>", line 1
a + 1 = 3 # エラーになる
^^^^^
SyntaxError: cannot assign to expression here. Maybe you meant '==' instead of '='?
エラーメッセージには、「式(a + 1)に代入することはできない。演算子は [ = ] ではなくて、比較用の[ == ] では?」と示されています。この場合は、演算子が誤っているのではなく、代入演算子の左辺が式になっているのが間違いなので、左辺の式を適切な変数(例えば単なる a)などに変更する必要があります。
文字列の利用
引用符を使用した文字列の定義
文字の並びを一重引用符 [ ' ] または二重引用符 [ " ] で括ると、文字列と呼ぶデータとして使用できます。文字の並びには空白文字一部の記号を含めることができます。
print('Python')
print("Python Programing")
Python
Python Programing
文字の並びには、全角文字(漢字や仮名)を含めることができます。文字の並びとして数字を並べることができますが、文字の並びであって数値ではありません。
print('情報Ⅰ') # 漢字の表示
print('123') # 数字の文字列の表示、数値ではない
情報Ⅰ
123
文字列の加算
文字列同士は数値と同じ [ + ] 演算子で加算でき、その機能は文字列の結合と定義されています。数値に用いられるのと同じ [ + ] 演算子でも、使用するデータの種類によって機能が異なるので注意してください。
numstr= '123' + '456' # 123と456の加算結果は579だが
print(numstr) # '123'と'456'の加算(結合)結果は'123456'
numstr = 'python' + numstr # 変数に記録された文字列と文字列も加算(結合)できる
print(numstr)
123456
python123456
文字列と数値との演算子として加算は定義されていないので、以下のプログラムを実行するとエラーになります。
a = 123 + '123' # '123'は文字列ではないので123と加算できない
上記のプログラムを実行しようとして出力されるエラーメッセージの最後の2行を抜き出して以下に示します。
File "<exec>", line 1, in <module>
TypeError: unsupported operand type(s) for +: 'int' and 'str'
エラーメッセージには、「整数型と文字列型用の [ + ] 演算子は定義されていない」と示されています。この場合は、プログラムの目的や自分自身の意図を確認して、[ + ] 演算子の左辺の123を文字列に書き換えて文字列の加算にするか、[ + ] 演算子の右辺の'123'を数値に書き換えて数値の加算にするか、修正する必要があります。
変数への文字列の代入
変数には、数値だけでなく文字列や他のデータも記録できます。
lang = 'python'
print(lang)
python
プログラムを書いていると、変数と文字列データを混同しやすいので注意してください。引用符によって括られているかどうかで、文字列か変数かが異なっります。
python = 10
print(python) # 変数に記録された値の表示
print('python') # 文字列の表示
10
python
キーボード入力
PyTermでは現在利用できません。
条件分岐
変数の値によりプログラムに異なる処理をさせたい場合は、if
文を使用することができます。例えば、「もしある条件が満たされたら、この処理を実行する」というような機能を実現できます。if
文を使うことで、プログラムの動作を状況に応じて柔軟に制御することができます。
条件式
==, !=, >, <
単純if文
if文を書く際の注意点を以下に示します。
- if の後に「条件式」を記述します。
- この場合は、[ number % 2 == 0 ]
- 「条件式」の後にコロン [ : ] を付けます。
- 字下げ(インデント)(例えば空白4文字)して「条件式」が真の場合に実行する処理を記述
- 処理は必要に応じて同じ字下げ文字数で複数書くことができる。
if
文を使った簡単なプログラム例を示します。
number = 6
if number % 2 == 0: # numberを2で割った余りが0、すなわち偶数の場合に真
print("偶数です。") # if文の条件式が真のときに実行する処理
このプログラムでは、numberに代入されている数値が偶数の時に、「偶数です。」と表示します。
偶数です。
numberに奇数を代入したときにプログラムの実行結果がどうなるか確認してください。このプログラムでは、numberが奇数の時に行う処理が指定されていないため、何も表示されません。
if文で指定した条件式が真の場合に実行する処理は、複数書くことができます。ただし、それらの処理は、すべて字下げの文字数が一致している必要があります。
number = 6
if number % 2 == 0: # numberを2で割った余りが0、すなわち偶数の場合に真
print("偶数です。") # if文の条件式が真のときに実行する処理
print("値は", number)
偶数です。
値は 6
参考までに、字下げ量をあえて一致させなかったらどうなるか確認して見ましょう。
以下の例のように、条件式が成立した場合に実行する複数の処理の字下げ文字数が一致していない場合には、エラーとなりプログラムは実行できません。
number = 6
if number % 2 == 0: # numberを2で割った余りが0、すなわち偶数の場合に真
print("偶数です。") # if文の条件式が真のときに実行する処理
print("値は", number)
字下げする文字数は何文字でもいいのですが、字下げを行う最初の行(上の例では4行目)が、字下げ文字数の基準となります。
上のプログラムの様に2番目以降の処理(5行目)の字下げ量が字下げの最初の行より少ない場合には、以下の様なエラーメッセージが出ます。
File "<exec>", line 5
print("値は", number)
^
IndentationError: unindent does not match any outer indentation level
エラーメッセージは、「字下げをやめようとしているけど、ちゃんと字下げが解除されていない(字下げする文字の削減数が十分ではない)」ということを指摘しています。要するにPythonインタプリタは、あなたが字下げの文字数を間違ったのではなく、字下げの解除を行おうとして、字下げの文字を削減したが、その削減が十分に行われていないと理解しているようです。
次に字下げの文字数が増加した場合を見てみましょう。
number = 6
if number % 2 == 0: # numberを2で割った余りが0、すなわち偶数の場合に真
print("偶数です。") # if文の条件式が真のときに実行する処理
print("値は", number)
上のプログラムの様に、字下げの文字数が字下げを行った最初の行より多くなった場合には、以下の様なエラーメッセージが出ます。
File "<exec>", line 5
print("値は", number)
IndentationError: unexpected indent
エラーメッセージとしては、「ここではさらなる字下げはできない」ということを指摘しています。ことらはPythonインタプリタは、あなたがさらなる字下げを行おうとしているが、新たなif文やfor文を書いているわけでもないので、なぜ字下げを行おうとしているかわからないといっています。
if-else文
if文では、else節を追加することで、「条件式」が偽となった場合の処理を追加できます。
number = 6
if number % 2 == 0: # numberを2で割った余りが0、すなわち偶数の場合に真
print("偶数です。") # if文の条件式が真のときに実行する処理
else:
print("奇数です。") # if文の条件式が偽のときに実行する処理
偶数です。
numberに奇数を代入したときにプログラムの実行結果がどうなるか確認してください。このプログラムでは、numberが奇数の時に行う処理が指定されているため、以下のように表示されます。
奇数です。
繰り返し
大量のデータを効率的に処理するために、繰り返し処理が使用されます。また、数学的な計算で計算精度が十分なレベルになるまで反復計算を行う必要がある場合にも、繰り返し処理が使用されます。
繰り返し処理には、以下の2種類の文が使用されます。
- for文
- while文
for文
for文を使用すると、回数を指定した繰り返し処理を行うことができます。
for文にはいくつかの形式がありますが、単純な形式を以下に示します。
for 制御変数 in range(繰り返し回数):
処理1
:
処理n
以下のプログラム例はprint()関数を5回繰り返し実行します。
for i in range(5): # インデントして記述された処理を5回行う
print('Hello', end=' ') # 繰り返し実行する処理。endオプションで実行後の改行を空白に変更。
print('World') # 同じインデントで処理を複数指定できる。
Hello World
Hello World
Hello World
Hello World
Hello World
range()で指定している繰り返し回数5を例えば100に変更すると、print()関数を100回実行するようになります。このように、for文により、繰り返し回数を指定して、実行したい処理を何度でも簡単に繰り返し実行させることができます。
先の例では、制御変数に当たる i を使用していませんでした。i には繰り返しの度に、0から繰り返し回数 -1 まで、新たな繰り返しごとに1ずつ増加した整数が代入されます。繰り返し処理では、その制御変数の値を使用することもできます。
ここでは単純に、制御変数の内容を確認できるようにprint()関数で制御変数の値を出力してみましょう。
for i in range(5): # iには繰り返しの度に0から4(5-1)が代入される
print(i) # iの値を使用した処理を書ける。
0
1
2
3
4
出力されている数値の数で、指定した繰り返し回数と合致する5回ほどprint()関数が実行されていることが分かります。また、制御変数 i の値が、0から1ずつ増加して、指定回数-1の4まで増加していることが確認できます。
また、for文のrange()の引数の指定方が異なる以下のような構文も利用できます。
for 制御変数 in range(初期値, 最終値 + 1):
処理1
:
処理n
制御変数の名前は自由に指定することができます。次は x にしてみましょう。
for x in range(10, 15): # xには繰り返しの度に10から14(15-1)が代入される
print(x) # xの値を出力して確認
10
11
12
13
14
for文の中で、制御変数が偶数か奇数かを判定して出力するプログラムを作成してみましょう。この処理では、for文の中に、制御変数が偶数か奇数かを判定するための if 文を組み入れます。
for i in range(1, 5):
if i % 2 == 0:
print(i, "は偶数です。")
else:
print(i, "は奇数です。")
1 は奇数です。
2 は偶数です。
3 は奇数です。
4 は偶数です。
条件の指定
while文
while
文は、指定した条件が真(True)である間、繰り返し処理を行うための構文です。以下に基本的な例を示します。while
文のブロック内のコードは、必ずインデント(通常はスペース4つ)で示します。
# 1から5までの数を表示するプログラム
count = 1
while count <= 5:
print(count)
count = count + 1 # count の更新処理を忘れると無限ループになる
このプログラムでは、count
が5以下である間、count
の値を表示し、count
を1ずつ増やし続けます。count
が6になると条件が偽(False)となり、ループが終了します。
while
文の条件が常に真(True)である場合、無限ループに陥る可能性があります。無限ループを避けるためには、ループ内で条件を変化させる処理を必ず含める必要があります。