True
上級マクロ経済学
第4回 pythonによる条件文と繰り返し処理
条件式
条件式をもとに、処理を分岐させることができます。
- 条件式の例を再掲。
1 if
分岐とfor
ループ
if
分岐
ある条件を
- 満たす時
- そうでない時
それぞれで別の処理をしたい場合、if分岐を使う。
if
のみの処理
if
の後に半角スペース- 条件式を書く
- 条件式のあとに
:
を書く - 改行する
- 自動でインデント(少し長い空白)が入る
- インデントが入らない場合
tab
キーを押してインデントを入れる。
- 条件式が
True
の時にインデントされている部分が実行されます。
例:絶対値をとる計算(if
のみ)
a = -1 # aを与える
if a < 0: # もしaが負なら
print(str(a)+"は負の数です。")
b = a*(-1)
print(str(a)+"の絶対値は"+str(b)+"です。")
if a >= 0:
print(str(a)+"は正の数です。")
b = a
print(str(a)+"の絶対値は"+str(b)+"です。")
-1は負の数です。
-1の絶対値は1です。
a
を変えて実行してみてください。
if
とelse
if
のインデントのブロックの後に使う。- 「
if
以下が成立しないとき」にelse
のブロックの処理が行われる。
a
を変えて実行してみてください。
elif
文
if
とelse
の間に挟めます。if
で条件を満たさなかった際に、さらに条件を足せます。
for
ループ
繰り返しで同じ処理を行う場合、for
ループを使います。
いまはi=10です。
いまはi=20です。
いまはi=30です。
in
の後のリスト[0,1,2]
の左から順にi
に代入されていきます。- インデントされているブロックがの終わりに来ると、
i
が一つ進みます。 - リストの終わりまで
i
が繰り返されたら、ループが終了します。
for
で扱うリスト
range(y)
で0
からy
以下で、1ずつ増えていくようなリストを入れることができる。
いまはi=0です。
いまはi=1です。
いまはi=2です。
いまはi=3です。
いまはi=4です。
i
に関連付けないでも、要素の数だけループしてくれる。
range(x,y)
でx
からy
以下で、1ずつ増えていくようなリストを入れることができる。
for
で扱う代数
代数は別にi
じゃなくてもよい。
name_list = ["佐藤", "鈴木", "近藤"]
for name in name_list: #name_listの中身が順にnameに代入されてゆく
print("あいつは"+name+"です。")
あいつは佐藤です。
あいつは鈴木です。
あいつは近藤です。
- リストを巡りたい場合、
len()
関数で長さを取得したりする。
例:演算を繰り返す。
\sum_{x=0}^{10} x = 0+1+2+\cdots + 10
例:リストを追加していく。
<list>.append(x)
でx
を<list>
の後ろに追加する。
- 0から10までの要素を持つリストを作成する。
while文
- ’while’文は、’while’以下の条件がTrueである限り、インデント部分の処理を繰り返す処理。
whileの注意点
for
よりバグが起きやすいので注意(無限処理)。
例:7の倍数を取り出す
1から100までの中で、7の倍数のみを取り出してみよう。
- ifとforを組み合わせる例
result = [] # 結果を保持するリストを作成する
for i in range(1,101): # 1から100までのiについて
m = i%7 # 7で割った余りを計算
if m==0: # 7で割った余りが0なら、割り切れる
result.append(i) # 割り切れる場合、結果をリストに保存する
## 結果を表示する
print("--------------------------------------")# ハイフンで線を入れる(単に見やすくするため)
print("1から100までで、7の倍数は次の数だけ存在する。")
print(len(result))
print("--------------------------------------") # ハイフンで線を入れる(単に見やすくするため)
print("具体的に書くと、次の数が該当する。")
print(result)
--------------------------------------
1から100までで、7の倍数は次の数だけ存在する。
14
--------------------------------------
具体的に書くと、次の数が該当する。
[7, 14, 21, 28, 35, 42, 49, 56, 63, 70, 77, 84, 91, 98]
2 関数
関数
同じような処理を何度も繰り返す際に、処理をひとまとめにしたものを関数という。
def f(x):
で変数x
を持つf
という関数を作る。- インデントブロックが関数の中身の処理。
- 返り値を
return
で指定できる。
- 関数を使う
コードの作成とコメント
- デバッグしやすくするために、コメントを残して関数を作ります。
- 自分で描いたコードも、後から見て処理の意図がわからない場合も多々あるので、コメントはなるべく入れるべき。
def make_to_list(x):
"""
コメントアウトで関数の中身の説明を入れたりします。
デバッグしやすくなるためです。
------------
input:
x : int
------------
output: 0 to x list
"""
# 実際の処理はここから
return_list = [] # 空のリストを作る
for i in range(x+1): # x+1より小さい整数(x)まで
return_list.append(i) # return_listに追加していく
return return_list # return_listを返す
make_to_list(10) # テストで出力してみる
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
演習例:小数第n位の取得
ある数xの小数第n位を取得する関数を作ろう。
def get_nth(x,n):
"""
xの小数第n位を取得する
input
x (float) : 小数を取得したい数
n (int) : 取得する小数点以下第n位のn
output (int) :
xの小数第n位の値
"""
y = x*10**n # 小数第n位の値が1の位にくるようにする
m = y%10 # 10で割った余りを計算すると、1の位+小数点以下になる
m_text = str(m) # 文字列に変換
num_text = m_text[0] # 一番初めの値を取得したいので、第0要素を取得
num = int(num_text) # num_textは文字列形式で保存されているので、整数形式に変換
return num # 結果を返す。
pi = 3.14159265359
print(get_nth(pi, 2))
4
まとめ
- ここまでできるとたいていのことならできます。
- プログラミングは、基本的には、習うより慣れろです。
- 次回からはライブラリを用いた処理をします。
- Numpy
- Matplotlib
- Pandas