pythonに限った話では無いですが今回教える条件分岐と繰り返し処理はプログラミングに於いて重要な内容です。人が物事を考える時や何かをする時にこの時はこうする、あの時はこうすると考えたり、何回行ったら終了と色々な場面で分岐したり繰り返しをします。とはいえ難しく考えなくても大丈夫です。文法を覚える労力を少し使えば理解できる内容で、さらに慣れてしまえば簡単なプログラムは組めるようになると思いますのでしっかりと理解するようにしましょう。
①ー①条件分岐
単刀直入かつ簡単に書けばコードは以下の様になります。
if 条件A == 数値:…①
処理A
elif 条件B == 数値:…②
処理B
else:…③
処理C
順を追って説明します。まず①についてですが条件A == 数値という条件式を満たすと処理Aが動きます。また==は他にも種類があり表にまとめると
記号 | 意味 |
a>b | aはbより大きい |
a>=b | aはb以上 |
a<b | aはb未満 |
a<=b | aはb以下 |
a==b | aとbは等しい |
a!=b | aとbは等しくない |
となります。また文字列の場合は意味が変わり
記号 | 意味 |
< | 辞書的に前にある |
<= | 辞書的に以前にある |
> | 辞書的に後にある |
>= | 辞書的に以後にある |
== | 等しい |
!= | 等しくない |
となります。それらに加えて以下も使用できます。
記号 | 意味 |
in | 文字列の中にもう一方の文字列が含まれているか |
not in | 文字列の中にもう一方の文字列が 含まれていないか |
startswitch() | 前方一致 |
endswitch() | 後方一致 |
文字列の大小関係はutf-8の大小で比較されるため日本語等では辞書的な並びになるとは限らないため注意してください。
続いて②についてですがこれは条件が複数ある場合に効果を発揮します。例えば果物を一つ買うときの値段で考えみましょう。
- りんご…180円
- ばなな…200円
- ぶどう…300円
としましょう。(具体的な相場は知らないためあくまで適当に書きました)これらを先ほどの条件分岐を使ってまとめると以下の様になります。
購入品 = ''
何を買ったの?
もしりんごを買ったら
180円
もしばななを買ったら
200円
もしぶどうを買ったら
300円
これをpythonの書き方でまとめると以下の様になります。
puchesed_item = '' #初期値が無いと条件外のものが来たときエラーが出る場合があります。
puchesed_item = input('何を買ったの?')
if puchesed_item == 'apple':
print('180yen')
elif puchesed_item == 'banana':
print('200yen')
elif puchesed_item == 'grape':
print('300yen')
②については以上で、最後に③についてですがこれはいずれの条件に当てはまらない時の場合に処理が働きます。先ほどの果物を一つ購入する例に加えてみるとすれば以下の様になります。
puchesed_item = '' #初期値が無いと条件外のものが来たときエラーが出る場合があります。
puchesed_item = input('何を買ったの?')
if puchesed_item == 'apple':
print('180yen')
elif puchesed_item == 'banana':
print('200yen')
elif puchesed_item == 'grape':
print('300yen')
else:
print('0yen')
実際に購入していない、もしくは想定していない果物、あるいは果物以外を購入した場合を想定して0円と記入しました。なのでもしelseを使う場合はしっかりと意味を持たせて使用しないと想定外のプログラムになるため注意してください。またif文を使用するときのもう一つ注意点として改行をした後にTabキーを押してインデントと呼ばれる空白を作らないとエラーが出ますので気をつけてください。
①ー②論理演算子
if文を使用する時にもう一つ知ってほしい事としては論理演算子についてです。論理演算子はいくつかありpythonで使用する物だと
- AND(論理積)
- OR(論理和)
- NOT(否定)
があります。恐らく論理積や論理和という言葉が高校に通っていた人であれば何を意味するのかは分かると思います。これらを使いif文を書いた場合の返り値は分かりやすく表に描くと
・AND
条件式A(以下A) | 条件式B(以下B) | A AND B |
True | True | True |
True | False | False |
False | True | False |
False | False | False |
・OR
A | B | A OR B |
True | True | True |
True | False | True |
False | True | True |
False | False | True |
・NOT
A | NOT A |
True | False |
False | True |
となります。また論理演算子には使用する順番があり
- ①NOT
- ②AND
- ③OR
以上の様になりさらに()をつける事によって先に括弧の中の条件式を優先的に使用するようになる。
これらの事を踏まえて具体例を一つ試してみましょう。
a = 0
b = 0
a = int(input('A='))
b = int(input('B='))
if not (a >= 0 and b >= 0):
print('自然数を入力してください')
else:
print(a+b)
これを起動(F5キーを押す)すると
pythonシェル上で両方が自然数の時だけ計算するプログラムが出来ました。ちなみに自然数は0を含まない正の整数を指します。以上で条件分岐について修了です。(書くのにそれなりの時間がかかりました…)ひとまず休憩でもしましょう。
②ー① while文、for文
繰り返し処理は2種類あります。一つはwhile文、もう一つfor文です。主な違いはwhile文は”条件を満たしている時に永遠に繰り返す処理”で、for文は”決められた回数が終わるまで処理を繰り返します”。
これだけとよく分からないので具体的なコードを書いてみます。まずwhile文を書いてみます。
i = 0
while i < 6:
i += 1
print(i)
実行結果は以下になります。
条件をiが6未満の間、処理を繰り返すようにプログラムを組みました。さらにiと条件の関係は以下になります。
i | i<6 |
1 | True |
2 | True |
3 | True |
4 | True |
5 | True |
6 | False |
また条件の設定を間違えてしまうと無限ループに陥ってしまいます。先ほどのコードの条件をi>=0にしてしまうと
画像は途中までしか映してないですが実際はものすごい早さで1000以上の値を表示して止まらなくなっていしまいます。while文を使うときはとにかく条件の設定に注意してください。
つづいてfor文でコードを書いてみます。
for i in range(5):
print(i)
iにrange関数に設定された数を代入してその数を表示するプログラムを組みました。range関数は以下のような仕組みを持っています。
詳細 | 結果 | |
range(m) | 0からm-1までの集まり | range(5)→0,1,2,3,4 |
range(m,n) | mからn-1までの集まり | range(2,5)→2,3,4 |
②ー②高度な繰り返し処理
繰り返し処理の中に繰り返し処理を組み込む事が出来ます(多重ループ)。そして繰り返し処理を抜け出す処理も出来でき(break、continue)何もしない処理(pass)もあります。
多重ループはwhileもしくはforの条件を書いた後にインデントを変えて再度繰り返し処理の設定を書くと最初のループ(m回目)後に次のループ(1~n回目)を繰り返す、つまり累計m×n回処理を行います。
処理を抜け出す処理はbreak、continueの2種類ありbreakは処理を抜け出した後その後の処理を行うのに対してcontinueは一時的に抜け出して再度繰り返し処理を行う性質を持っています。
passは繰り返し処理の条件を書いた後に書くと何もせずに処理を終えます。
以上の事を踏まえて具体的な3つコードを書いてみます。
i = 0
while i < 9:
i += 1
print(i)
if i == 5:
break
iが9未満の時、繰り返し処理を行うがiが5になった瞬間処理を抜けるプログラムです。
for i in range(9):
i += 1
if i == 5:
continue
print(i)
iが5の時に繰り返し処理を抜け出すプログラムです。
i = 0
while i < 3:
for j in range(4):
if j == 2:
pass
else:
print(str(i) + ',' + str(j))
i += 1
最初のループがiが3未満の時にその後ループでjが0~3の間繰り返し処理を行うけどjが2の時にi,jの組み合わせを表示させないプログラムです。
以上で条件分岐と繰り返し処理の解説でした。初心者向けに書いたつもりでしたがかなり長くなってしまいました。とはいえプログラムを作成するに於いて重要な事なのでどうしても長くなってしまいます。もし実際にプログラムを組んだときにおかしくなったときはインデントの位置の確認と条件が間違っていないか等をよく確認してください。
次回は配列と関数定義について解説します。恐らくかなり長くなりかつ難しいので頑張って覚えてください。
コメント