hirhirの日記

Pythonとデータ分析と人口知能

Python3 入門:if文 制御構文を掘り下げる

Python3 入門 if文

さてさておきまりのif文ですが 入門ということで

8. 複合文 (compound statement) — Python 3.4.3 ドキュメント

はい実にお決まりです。

ただこれ以外にも色々と書き方があるので

ちょっとそこまで掘り下げて見てみる

チュートリアルが不親切な気がするのは、自分だけでしょうか。そうですか。。

ではipython notebookで開始します。

In [1]:
 
a = 9
if (a <= 10) :
    print ('10以下')
elif (a > 10) :
    print('11以上')
else:
    print('その他')
 
 
 
10以下

はい

いたって普通です。これを変数変えてそれぞれ通します。

 

In [13-]:
 
a = 15
if (a < 10) :
    print ('10以下')
elif (a > 10) :
    print('11以上')
else:
    print('その他')
 
 
 
11以上
In [14]:
 
a = 10
if (a < 10) :
    print ('10以下')
elif (a > 10) :
    print('11以上')
else:
    print('その他')
 
 
 
その他

まぁ要は評価がTrueになればステートメントに入るということですね。 

じゃあステートメントに何も書かなかった場合は当然Errorになるのですが

見てみます。

In [15]:
 
a = 10
if (a < 10) : 
elif (a > 10) :
    print('11以上')
else:
    print('その他')


 
 
 
  File "<ipython-input-15-53b3d78700d4>", line 3
    elif (a > 10) :
       ^
IndentationError: expected an indented block
In [16]:
 
a = 10
if (a < 10) :
    print ('10以下')
elif (a > 10) :
else:
    print('その他')
 
 
 

File "<ipython-input-16-f5b0e333b53f>", line 5 else: ^ IndentationError: expected an indented block
In [17]:
 
a = 10
if (a < 10) :
    print ('10以下')
elif (a > 10) :
    print('11以上')
else:
 
 
 
  File "<ipython-input-17-d1c1ffa1211e>", line 6
    else:
         ^
SyntaxError: unexpected EOF while parsing

 

 若干読みやすくするためにコード詰めてますが

elseは返却するエラーが違います。

if elifの箇所を見ればわかりますがそれぞれ1段下の評価式の部分でエラーが出ていますので、このような形になったんでしょう。

このような場合にはpassを使用しますがあまり使わないでしょう

 

In [10]:
 
a = 10
if (a < 10) :
    pass
elif (a > 10) :
    print('11以上')
else:
    print('その他')
 
 
 
その他
In [22]:
 
a = 10
if (a < 10) :
    print ('10以下')
elif (a > 10) :
   pass
else:
    print('その他')
 
 
 
その他
In [25]:
 
a = 10
if (a < 10) :
    print ('10以下')
elif (a > 10) :
    print('11以上')
else:
    pass
a
 
 
Out[25]:
10

 

はい華麗にパスしてますね

次に三項演算子でのif

In [26]:
 
a = 100
print (a % 10 if a > 10 else a * 10)
 
 
 
0

あれ?これは三項なのか?

 

In [32]:
 a = 9
print(a % 10 if a > 10 else a *10 if a==8 else a*100)
 
 
 
900

 三項じゃねぇ!!ガ━━(;゚Д゚)━━ン!!

XLSか!!

for文でも使えるけど

それは次回。。。

いやこれはあんまり深いネストは使いたくないな。。。