Pythonの構文(後半)
こんにちは、切口太郎です。
今回は、Python の構文(文法)についてです。
Pythonの構文はかなりシンプルにできていますので、簡単なルールを覚えてしまえば、あとはパターン形式で書くことができます。
Python の良いところは簡単なところです。
Python の構文では5つのポイントについてお話します。
1 構文の基本
2 コメントの書き方
3 外部プログラムを呼び出す import 文の使い方
4 条件分岐
5 ループ
今回は、Pythonの構文(後半)で、4と5のお話をします。
4 分岐
分岐は、条件によって処理を分ける方法です。
Python の分岐ステートメントは3種類あります。
ステートメント
|
説明
|
例
|
if
|
条件式の条件を判定します。
|
if value == 100:
|
| elif |
if文の条件式が偽の時に 別の条件式判定します。
|
if value == 100:
# 真の処理
elif value == 101:
|
else
| if文の条件式が偽の時処理を行います。 |
if value == 100:
pass
else:
# 偽の処理
|
条件式とは、value == 100 のように、判定して真(True) と 偽(False) の結果がでる式のことです。
次の式は、条件式として利用できます。
value > 100 # 値が 100 より大きい時
value < 100 # 値が 100未満の時
True # bool 型で真
False # bool型で偽
name[0] == 'K' #名前の先頭が大文字 K の時
試してみましょう!
>>> value = 100 # value を 100 に設定
>>> value > 100
False
>>> value < 100
False
>>> True
True
>>> False
False
>>> name="Kirikutitarou" # name に "Krikutitarou" を設定
>>> name[0] == 'K'
True
|
Python は、すべて 真(True) または、偽 (False) の判定結果を返してきます。
条件式には2つの演算子を利用できます。
比較演算子
|
AとBを比較して真または偽を判定する
|
論理演算子
|
結果Qと結果Rを比較して真または偽を判定する
|
比較演算子
比較演算子は、value > 100 のように、value(A) と 100 (B) を単純に比較して結果を判定します。
比較演算子には、次のものが利用できます。
演算子
|
英字表記
| 説明 |
例
|
==
|
Equal (EQ)
|
AとBが等しければ 真
| A == B |
<
|
Less than(LT)
| AよりBが大きければ真 |
A < B
|
>
|
Grater than(GT)
|
AがBより大きければ真
|
A > B
|
>=
|
Grater equal(GE)
|
AとBが等しいまたは、AがBより大きければ真
|
A >= B
|
<=
|
Less equal(LE)
|
AとBが等しいまたは、AがBより大きければ真
|
A <= B
|
!=
|
not equal(NE)
|
AとBが等しくなければ真
|
A != B
|
英字表記を記載したには、言語の本でこのような表記が多いためです。
Condition EQ とか記述されると、なんだかわからなかったので、一応追記しておきました。
「今日の調子は、良い感じ!」と読んでしまわないようにです。(若かった頃の話ですが・・・)
論理演算子
論理演算は、複数の比較演算の結果を判定する時に使用します。
演算子
|
説明
|
例
|
and
|
比較演算の結果 RとQの両方が真の場合に真
|
A > 100 and A < 200
|
or
|
比較演算の結果 RとQのどちらかがが真の場合に真
|
A > 100 or B > 100
|
not
|
比較演算Rの結果が偽だった場合に真
|
not A > 100
|
最後に、今までの内容をぎゅっと込めたサンプルです。
きっともう、読めますね。
# if 文サンプル
def if_sample(value):
if not value:
print("none value")
elif value == 100:
print("100")
elif value > 100 and value < 200:
print("101-199")
elif value < 100 or value > 200:
print("too big or too small")
else:
print(200)
5 ループ
ループは、同じ処理を繰り返す時に利用します。
Python のループは、for文とwhile 文の2種類があります。
for
|
for 変数 in データ
|
データはリストやタプルなどのイテレーション情報を持つ型を使用できます。
データの先頭から1つづづ、変数名に値を代入して、データが終端になると終了します。
|
while
|
while 条件式
|
条件式は、if文と同じです。
条件式が真の間、反復処理を繰り返します。
|
ループを終了するためには、for文はデータがなくなるまで、while文は条件式が偽になることですが、強制的にループを終了する方法もあります。
| break |
break
|
for または、while のループを終了します。
|
ループは、同じ処理を繰り返す時と言われても、なんかピンと来ないと思いますので、サンプルで順に見ていきたいと思います。
サンプルは、ある値を与えて、それが素数か素数ではないかを判定するプログラムです。
素数の定義は、「1か自身の値でしか割り切れない数」となっています。
与えられた数を2以上の値から順に与えられた数まで割っていき、与えられた数以外で割り切れない場合には素数、他の値でも割り切れた場合には素数でないという試し割り方式で判定をします。
for 文
for 文を利用したサンプルです。
'''
素数試し割り探索
'''
# for 文による素数チェック
def is_prime_number_for(value):
count = 0
ret = True
for countval in range(2,value + 1):
check = (value / countval)
if check.is_integer():
count += 1
if(count > 1):
ret = False
break
return ret
# 素数のチェック結果を表示する
def print_result(result , value):
if(result):
print("It's prime number : " + str(value))
else:
print("It is not prime number : " + str(value))
# 実行開始
# 素数か調べる値
value = 1238383
# for文による素数チェック
check_for = is_prime_number_for(value)
print_result(check_for , value)
5行目、18行目は関数です。
5行目の関数は、与えられたパラメータ (value) を試し割りして素数か判定しています。
関数のリターン値は、素数であれば、True 、そうでなければ False を返します。
18行目は、5行目の試し割り関数の結果 (result) と値(value) を元に判定結果を表示しています。
では、ループのある5行目の試し割り関数を説明します。
6行目の count は、割り切れた数を保持します。
割り切れた場合には、+1 、割り切れない場合には値は変化しません。
7行目は、関数のリターン値を設定します。
8行目が for 文です。
for 変数名 in データの形式で、変数名は countval , データが range関数を使っています。
range関数は、次のような機能の関数です。
関数名
|
第一引数
|
第二引数
|
説明
|
range
|
初期値の指定
|
終了値の指定
|
初期値 <= x < 終了値
までの値を順に生成します。
|
この例であれば、value=10 の場合には、range は、(2,3,4,5,6,7,8,9) のデータを生成します。
これで、2から value まで順に割る数を作成しています。
10行目の is_integer() メソッドは、float のメソッドです。
値の小数部が0の場合に True を返します。割り切れたかの判定に使っています。
14行目で break を使っています。
これは、すでに割り切れている数が2つ以上ある場合には、この値は素数の条件を満たしていないので、リターン値に Flase を設定してループ終了します。
27行目は、素数か判定する値です。ちなみにこの値は素数です。
30行目で素数判定用の関数を呼び出しています。
このプログラムの実行結果は、こうなります。
It's prime number : 1238383
|
Python の for 文は、他の言語でいう「拡張for文」ですので、使い方がシンプルで高機能です。
while文
先程と同じ素数判定のプログラムを for文のところを while 文で記述しています。
対比しながら見ていただければ、感じがつかめると思います。
'''
素数試し割り探索
'''
# while 文による素数チェック
def is_prime_number_while(value):
count = 0
countval = 2
ret = True
while countval <= value:
check = (value / countval)
if check.is_integer():
count += 1
if(count > 1):
ret = False
break
countval += 1
return ret
# 素数のチェック結果を表示する
def print_result(result , value):
if(result):
print("It's prime number : " + str(value))
else:
print("It is not prime number : " + str(value))
# 実行開始
# 素数か調べる値
value = 1238383
# while文による素数チェック
check_while = is_prime_number_while(value)
print_result(check_for , value)
5行目の関数を while 文で書き直しました。
7行目の countval は、while 文の場合、自分で値を制御(16行目)しないといけません。
その他は、それほど変わりがないと思います。
ループは for 文でも while 文でもどちらでも記述ができます。
ループ処理が必要な場合は、まずfor文を利用するようにして、for 文が利用できないような条件式が必要な場合や、ループ用のデータが作れない場合(ループの中で外部から取得するなど)で while 文を検討するようにしましょう!
コメント
コメントを投稿