プログラミング言語 Python -後編-

プログラミング

はじめに

前編に続き、Pythonの基本機能についてのお話です。
今回はオブジェクト指向の要素の1つ、クラスにも触れています。

Pythonでコーディング

さっそく続きを見ていきましょう。

条件分岐

Pythonの条件分岐はif文で行います。
C言語にはswitch文もありましたが、Pythonにはありません。

条件分岐サンプルコード

a = 50

if a < 10:
print(“a < 10”)
elif a > 100:
print(“a > 100”)
else:
print(“a <= 10 かつ a <= 100”)

実行結果

a <= 10 かつ a <= 100

C言語と異なるのは、条件式の( )が無いことと、処理の塊を表す { } が無いことです。
Pythonでは、処理の塊はインデントで表現するルールになっています。
C言語では{ }で囲ってさえいれば、複数の処理を;で区切った上で1行で書くことも可能ですが、Pythonはインデントで分けることで、視覚的に理解しやすくする仕様になっています。

繰り返し文

条件が成立する間、処理を繰り返す方法です。
for文とwhile文がありますが、繰り返し回数が決まっているかどうかで使い分けます。

for文

繰り返し回数が決まっている場合はfor文を使用します。
リストの要素数だけ繰り返す方法と、range関数で指定した回数を繰り返す方法があります。

for文サンプルコード

cart = [‘牛肉’,’じゃがいも’, ‘人参’,’たまねぎ’] # 買い物リストを作成

# cartの要素が、1つずつingredientsに入る
for ingredients in cart:
print(ingredients, “を買います”)

# range関数で、0から4の数字を生成する
for num in range(5):
print(“num = “, num)

実行結果

牛肉 を買います
じゃがいも を買います
人参 を買います
たまねぎ を買います
num = 0
num = 1
num = 2
num = 3
num = 4

while文

繰り返し回数が決まっていない場合はwhile文を使用します。

while文サンプルコード

cart = [‘牛肉’,’じゃがいも’, ‘人参’,’たまねぎ’,”セロリ”,”トマト”] #買い物リストを作成
i = 0 # iを0で初期化
buy = cart[0] # カートの0番目をbuyに入れる

# セロリを買おうとするまで繰り返す
while buy != “セロリ”:
print(buy, “を買います”)
i = i + 1
buy = cart[i]

実行結果

牛肉 を買います
じゃがいも を買います
人参 を買います
たまねぎ を買います

セロリを買おうとしたところで、while文の繰り返し条件から外れたため、ループを終了しています。

関数

特定の処理を行う関数を、自分で定義することができます。
Pythonの関数には、C言語のような参照渡しは無く、可変長引数(アスタリスク1つ指定)と辞書型引数(アスタリスク2つ指定)があります。

関数サンプルコード

# 通常の引数2つ(n1,n2)、可変長引数1つ(*n3)、辞書型引数1つ(**n4)
def customfunc(n1, n2, *n3, **n4):
ret = n1 + n2
print(“n3[0] = “, n3[0], “, n3[1] = “, n3[1])
print(“n4[‘肉’] = “, n4[‘肉’], “, n4[‘野菜’] = “, n4[‘野菜’])
return ret

# 「1」はn1に入る
# 「2」はn2に入る
# 「3, 4」は可変長引数と解釈され*n3に入る
# 「肉=5,野菜=6」は辞書型の文法なので**n4に入る
result = customfunc(1, 2, 3, 4, 肉=5, 野菜=6)
print(“result = “, result)

実行結果

n3[0] = 3 , n3[1] = 4
肉 = 5 , 野菜 = 6
result = 3

クラス

Pythonはオブジェクト指向のプログラミング言語です。
オブジェクト指向とは、ある目的を達成するためのデータや関数をひとまとめ(クラス)にし、オブジェクト(物)として扱うという考え方です。
クラスとは、オブジェクトを構成する設計図です。
たとえばゲームのキャラクターの場合、名前・HP・MPなどのステータスを持っています。
キャラクターごとにステータス値は異なりますが、キャラクターを構成する要素は共通しています。この共通の要素をクラスとして定義します。
クラスを使って生成した実体をインスタンスと呼びます。

クラスのサンプルコード

class Charactor:
# クラス生成時の初期化メソッド(コンストラクタ)
def __init__(self, name, hp, mp):
self.name = name
self.hp = hp
self.mp = mp

# 現在のhpを返すメソッド
def read_hp(self):
return self.hp

# 引数に指定したhpを設定するメソッド
def write_hp(self, hp):
self.hp = hp

chara1 = Charactor(“eight”, 100, 50) # インスタンス(キャラクター1人目)を生成
chara2 = Charactor(“nine”, 200, 25) # インスタンス(キャラクター2人目)を生成
print(“chara1のhp = “, chara1.read_hp()) # chara1のhpを表示
print(“chara2のhp = “, chara2.read_hp()) # chara2のhpを表示
print(“chara1のhpを500に変更”)
chara1.write_hp(500) # chara1のhpを書き換え
print(“chara1のhp = “, chara1.read_hp()) # chara1のhpを表示
print(“chara2のhp = “, chara2.read_hp()) # chara2のhpを表示

実行結果

chara1のhp = 100
chara2のhp = 200
chara1のhpを500に変更
chara1のhp = 500
chara2のhp = 200

chara1とchara2は同じクラスから生成されたインスタンスのため、同じ種類のメンバ(クラス変数)とメソッド(関数)を持っています。
同じクラスではありますが別々のインスタンスなので、保持している値そのものも異なります。

メソッド__init__()は、インスタンス生成時に実行される初期化関数です。
初期化関数のことを、特別にコンストラクタと呼びます。

さいごに

駆け足でしたが、後編も以上です。
ここまでで触れてきたことは、基礎の基礎だけです。
しかし、現場で使われているような複雑に見えるコードも、ひとつひとつを分解して見ると

コメント

タイトルとURLをコピーしました