こんにちは。Taka です。
前回、Python の標準ライブラリの組み込み型(数値と文字列) について説明をしました。
組み込み型としてすべて1記事に収めたかったのですが、ものすごく長文になってしまったので、分けて説明します。本記事では続きの 配列・分岐・ループ について説明します!
それではどうぞ!
Python ではリスト・タプル・辞書・セットという配列(コレクション)が存在しており、それぞれ意味や用途が微妙に異なります。
上記 1 ~ 4 をまとめると以下なサンプルコードになります。
### リスト ###
# リストの要素を定義
list_elements = [1, 2, 3, "test", 5.12]
print(list_elements) # [1, 2, 3, 'test', 5.12]
# リストは要素を追加できる
list_elements.append("last") #末尾に追加
print(list_elements) # [1, 2, 3, 'test', 5.12, 'last']
### タプル ###
# タプルの要素を定義
tuple_elements = (1, 4, "tuple", 9.99)
print(tuple_elements) #
# 追加はできないのでエラーになる
tuple_elements.append("last") # AttributeError: 'tuple' object has no attribute 'append'
### 辞書 ###
# 辞書の要素を定義
dictionary_elements = {"a":"alpha", "b":"beta", "c":"theta"}
print(dictionary_elements) # {'a': 'alpha', 'b': 'beta', 'c': 'theta'}
# 辞書の b の要素だけを抜き出し
print(dictionary_elements["b"]) # beta
# 辞書に要素を追加
dictionary_elements.update (d="delta")
print(dictionary_elements) # {'a': 'alpha', 'b': 'beta', 'c': 'theta', 'd': 'delta'}
### セット ###
# セットの要素を定義
set_elements = {1, 2, 4, 1, "set",3 ,"set"}
print(set_elements) # {1, 2, 3, 4, 'set'}
# セットに要素を追加
set_elements.add("big")
print(set_elements) # {1, 2, 3, 4, 'set', 'big'}
if や else で単数や複数の条件を定義して処理を分岐します。条件として用いられるのが、比較演算子やブール演算になります。
分岐については以下のように書きます。
※ 条件式の最後のコロン(:)と、処理を定義する行の改行は忘れないようにしてください。
condition1 = 10
condition2 = True
condition3 = "japan"
if condition1 > 10: #条件式1
print("条件1") # 条件式1 が True ならこの処理をする
elif condition2 is condition1: # 条件式2
print("条件2") # 条件1 が False で 条件2 が True ならこの処理をする
elif condition3 == "japan": # 条件式3
print("条件3") #条件1,2 が False で 条件3 が True ならこの処理をする
else:
print("その他") # すべての条件が False ならこの処理をする
## 出力結果 ##
## 条件3
条件式で使われるのが、比較演算子やブール演算になります。
比較演算子は、A は B より大きい、A と B は同じである、など A と B を比較する際に使われる演算子で
プログラミング言語により微妙に使い方が変わります。Python での比較演算子は以下のように使います。
演算子 | 意味 |
> | より大きい |
>= | ~以上 |
< | より小さい |
<= | ~以下 |
== | ~と等しい |
!= | ~と等しくない |
is | 同じオブジェクトである |
is not | 同じオブジェクトでない |
==, != と is, is not の違いについては少しわかりづらいですが、以下の公式サイトの文言を引用します。
異なる型のオブジェクトは、異なる数値型を除き、決して等価になりません。さらに、型には、 (例えば関数オブジェクトのように) その型のどの 2 つのオブジェクトも等しくないという、退化した比較の概念しかサポートしていないものもあります。複素数とその他の組み込み数値型を比較するときや、オブジェクト同士が異なる型で比較できないときや、その他順序づけが定義されていないとき、演算子 < 、 <= 、 > 、 >= は TypeError 例外を送出します。
引用元: Python 3.7.1 比較
ブール演算は、and や or, not を使い、結果として True か False を返します。
条件1 and 条件2:条件1 と 2 の両方が True なら True を返す。それ以外は False。
条件1 or 条件2:条件1 と 2 の両方が False なら False を返す。それ以外は True。
not 条件1:条件1 が True なら False に、False なら True を返す。
サンプルコードはこんな感じです。
bool_condition1 = True
bool_condition2 = True
bool_condition3 = False
bool_condition4 = False
# and 演算子
bool_check1 = bool_condition1 and bool_condition2
bool_check2 = bool_condition1 and bool_condition3
bool_check3 = bool_condition3 and bool_condition2
bool_check4 = bool_condition3 and bool_condition4
print("and演算子の結果は ", bool_check1)
print("and演算子の結果は ", bool_check2)
print("and演算子の結果は ", bool_check3)
print("and演算子の結果は ", bool_check4)
## 結果 ##
# and演算子の結果は True
# and演算子の結果は False
# and演算子の結果は False
# and演算子の結果は False
# or 演算子
bool_check1 = bool_condition1 or bool_condition2
bool_check2 = bool_condition1 or bool_condition3
bool_check3 = bool_condition3 or bool_condition2
bool_check4 = bool_condition3 or bool_condition4
print("or演算子の結果は ", bool_check1)
print("or演算子の結果は ", bool_check2)
print("or演算子の結果は ", bool_check3)
print("or演算子の結果は ", bool_check4)
## 結果 ##
# or演算子の結果は True
# or演算子の結果は True
# or演算子の結果は True
# or演算子の結果は False
# not 演算子
bool_check1 = bool_condition1
bool_check2 = not bool_condition1
bool_check3 = bool_condition3
bool_check4 = not bool_condition3
print("not演算子の結果は ", bool_check1)
print("not演算子の結果は ", bool_check2)
print("not演算子の結果は ", bool_check3)
print("not演算子の結果は ", bool_check4)
## 結果 ##
# not演算子の結果は True
# not演算子の結果は False
# not演算子の結果は False
# not演算子の結果は True
定義した式が True である限り反復処理を行うために、ループ(繰り返し)を使います。
ループには、for文 と while文があり、それぞれ用途が少し異なります。
for文によるループ処理は、リストやタプル、文字列などの反復可能なオブジェクト(イテラブルオブジェクト)に対して使用されます。リストの要素が続く限り処理が繰り返されることが基本であり、もし処理を途中で止めるためには、break文を使用します。
for文の基本構造です。※ else は必須ではないです。
また、break を使う場合はこのように if を使って break の条件を定義します。
もし break で処理が止まると、後述の else は処理されないことに注意してください。
# for と else for '変数名' in '反復可能なオブジェクト' : '反復したい処理' else: '最後に行いたい処理。else は必須ではない' # for と break (else は処理されないパターン) for '変数名' in '反復可能なオブジェクト' : '反復したい処理' if 'ループを止める条件': break: # 条件が True ならループが停止 else: '最後に行いたい処理。上記 break が処理されると else はスキップされる'
サンプルコードは以下のようになります。
# リストの作成
lists = [1,2,3,4,5]
# リストの値が 4 になるまで処理をする for文
for listvalue in lists:
print(listvalue)
if(listvalue == 4):
break # ここでストップ
else:
print("ここは処理されません")
### 結果 ###
# 1
# 2
# 3
# 4
# 文字列を作成
string_value = "ABCDEF"
# 文字列を使ったループ
for alphabet in string_value:
print(alphabet) # 文字列の1要素を出力
else:
print("End of alphabet") # ループの最後の一文
### 結果 ###
# A
# B
# C
# D
# E
# F
# End of alphabet
式の値が True である限り、処理を繰り返すのが while文になります。そのため、式の値が False になるように処理をしないと、無限ループになってしまうので注意が必要です。
また、for文とは違い、リストやタプルなどの反復可能なオブジェクトを必要としません。
while文の基本構造はこの通りです。
while '条件文の真偽':
'反復したい処理'
'条件文が False になるための処理'
else:
'最後に行いたい処理。else は必須ではない'
サンプルコードは以下の通りです。
condition = 5
# condition が 0 になるまでループする
while condition > 0:
print(condition, "is not 0")
condition -= 1 # 1 ずつ減らしている
else:
print("end while")
### 結果 ###
# 5 is not 0
# 4 is not 0
# 3 is not 0
# 2 is not 0
# 1 is not 0
# end while
かなりの長編になってしまいましたが、
標準ライブラリの組み込み型についてある程度は触れることができました。
この記事はこれから Python でプログラミングをする際、何度も見直して辞書代わりに使ってもらえたらうれしいです。
次の記事では、組み込み関数について説明していきます。csv ファイルのインポートなどでも使われる関数も登場するため、ぜひ知っておきましょう。
それではまた次回に!