Python/条件分岐と繰り返し

出典: フリー教科書『ウィキブックス(Wikibooks)』
ナビゲーションに移動 検索に移動

条件分岐[編集]

条件分岐の基本[編集]

x = 3

if x == 2 :
    print("abcd")

条件分岐には、if を使います。

条件分岐の上のコードの、x == 2とは、「xが2に等しい」という意味です。

いっぽう、冒頭の「x=3」は、xに3を代入するという意味です。


python では、if文にある条件式にある等号と、代入との等号を区別するために、条件分岐での等号にはx == 2を使います。

上のコードでは、「xが2に等しい」の条件を満たさないため(xには3が代入されている)、実行しても文「abcd」は表示されません。

また、pythonでは、if文の中の命令は、字下げをします。半角スペース4つぶんを単位とした字下げが推奨されます。(なお、このように、ある行の始めを字下げすることを、一般的に「インデント」という。「インデント」は、けっしてpyhtonだけの用語でなく、IT系業種で昔から一般的に使われる用語である。)


つぎに、if文のなかのxの条件を変えてみて、条件が成り立つようにしましょう。

x = 3

if x == 3 :
    print("abcd")

上のコードでは、「xが3に等しい」の条件を満たすので、実行したら文「abcd」が表示されます。

つまり、if文の構文は、次のようになります。

if 条件式 :
    処理

では、別のコードを、学びましょう。

x = 3

if x == 2 :
    print("abcd")
print("ef")

上のコードでは、print("ef")はif文ブロックの外にあることになります。なぜなら、print("ef")は字下げされてないからです。なので、プログラムを実行すると「ef」が表示されます。


いっぽう、次のコードでは、結果が変わります。

x = 3

if x == 2 :
    print("abcd")
    print("ef")

上のコードでは、print("ef")はif文ブロックの中にあるので、プログラムを実行しても、「ef」は表示されませんし、もちろん「abcd」も表示されません。


ifブロック内は、字下げをそろえないと、エラーになります。

次のコードは、エラーになります。

x = 3

if x == 2 :
    print("abcd")
   print("ef")

(↑エラーになる。)


x = 3

if x == 2 :
    print("abcd")
    print("ef")
print("プログラムが終了しました。")

上のコードでは、実行すると「プログラムが終了しました。」だけが表示される。


条件式には、不等号(><など)も使える。

x = 3

if x > 2 :
    print("xが2よりも大きいよ。")
print("プログラムが終了しました。")

上のコードを実行すると「xが2よりも大きいよ。」と「プログラムが終了しました。」が表示される。

記号>のような、値を比較する演算子のことを比較演算子といいます。 pythonで使える比較演算子には、次の表のようなものがあります。

比較演算子
演算子 意味
> 左側の数が、右側の数よりも大きい
< 左側の数が、右側の数よりも小さい
== 両辺の数値の大きさが等しい
!= 等しくない
>= 左側の数が、右側の数よりも大きいか、
または両辺が等しい
<= 左側の数が、右側の数よりも小さいか、
または両辺が等しい

else[編集]

if文の条件式が成り立たない場合にさせる処理を、「else:」で書けます。

x = 3

if x == 2 :
    print("xが2に等しいよ。")
else:
    print("xが2に等しくないよ。")
print("プログラムが終了しました。")

上のプログラムを実行すると、「xが2に等しくないよ。」が表示されます。


なお、elseをつかわないでも、同じ内容の処理が書けます。

elseを使わない場合、上記のコードと同じ内容のコードは、

x = 3

if x == 2 :
    print("xが2に等しいよ。")
if x != 2 :
    print("xが2に等しくないよ。")
print("プログラムが終了しました。")

のようになります。

必要に応じて、elseを使うか、それとも使わずに書くか、分けましょう。

論理演算子[編集]

「変数xが2より大きくて、5より小さい」ときにだけ実行するような処理は、次のように書きます。

x = 3

if (x > 2) & (x < 5) :
    print("xが2より大きくて5より小さいよ。")
else:
    print("そうでない場合。")
print("プログラムが終了しました。")

&は、両方の条件が成り立つという意味です。

上記のコードを実行すると、「xが2より大きくて5より小さいよ。」が表示されます。「そうでない場合。」は表示されません。


xを6に変えてみましょう。

x = 6

if (x > 2) & (x < 5) :
    print("xが2より大きくて5より小さいよ。")
else:
    print("そうでない場合。")
print("プログラムが終了しました。")

上記のコードを実行すると、「そうでない場合。」が表示されます。「xが2より大きくて5より小さいよ。」は表示されません。

演算子 &をもちいて、

if 条件式A & 条件式B :

のように、使いうことにより、条件式Aと条件式Bが両方とも成り立つ場合に、「条件式A & 条件式B」が成り立つという意味にできます。(論理学の用語でいう「論理積」です。)

論理演算子
演算子 意味
& 両方とも成り立つ。(「論理積」)
|
すくなくとも、どちらか一方は正しい
(両方とも正しくても、かまわない)
(論理和)

※ 備考[編集]

よそのプログラミング言語にあるswitch文は、pythonには存在しません。

繰り返し[編集]

for文[編集]

for i in range(5):
    print("a")

のように書いて実行すると、range()のカッコ内の回数だけ、ブロック内の命令を繰り返す。上のコードの場合、実行すると、「a」を5回、表示する。

a
a
a
a
a

のように、表示される。

forのあとの変数は、別にiではなくても、かまわない。

for m in range(5):
    print("a")

しかし、慣習上、for文を書くときは、なるべく i で回数を数えることが多い。

for i in range(5):
    print(i)

のように、すると、

0
1
2
3
4

のように表示される。 つまり、変数iは0から数えられており、まず、ブロック内の処理を実行する前に、変数iがrangeの数字に到達してないことの確認をしており、rangeのカッコ内の数に到達したら、ブロック内の処理を実行せずに終了するという、仕組みである。


i=2
print("ブロックよりも前のiは",i)
for i in range(5):
    print(i)
print("ブロックの外側のiは",i)

(上記のコードの実行結果の出力は、下記のとおり)

ブロックよりも前のiは 2
0
1
2
3
4
ブロックの外側のiは 4

このように、for文の数えあげのための変数iは、for文の開始時に、いったん0に初期化される。また、数え上げが終わったあとに、iの変更結果は、そのまま残る。

しかし、他のプログラマーの混乱をふせぐため、あまり、for文の数えあげの変数(上記のコードの場合ならi)は、forブロック外の場所では使用しないほうが良いだろう。


while文[編集]

while[編集]

ある条件を満たすあいだ、処理を続けるには、while文を使う。

構文は

while 条件式 : 
    処理

のようになる。

(コード例)

i = "b"
while i != "q":
    print("入力した文字を3個、ならべるよ。(終了したい場合はqを入力)")
    i=input()
    print(3*i )

条件式の変数(上例コードではi)の中身は、べつに数値でなくても、かまわない。

上記のプログラムを実行すると、まず「入力した文字を3個、ならべるよ。(終了したい場合はqを入力)」と言われる。

入力文字として、たとえば「a」と入力すると、「aaa」と出力表示され、そして再び「入力した文字を3個、ならべるよ。(終了したい場合はqを入力)」と聞かれ、ふたたび入力を待つ状態になる。なので、「b」と入力してみると、「bbb」と出力表示される。

上記のプログラムは、文字「q」が入力されないかぎり、動作がつづく。文字「q」を入力することにより、終了する。


while文はif文と組み合わせることもできる。

i = "b"
while i != "q":
    print("文字を入力しよう。sを入力で物語がスタート。(終了したい場合はqを入力)")
    i=input()
    if i == "s":
        print ("始まったよ。")
        print ("むかし、むかし、あるところに、")
        print ("おじいさんとおばあさんが、すんでいました。")
        print ("おしまい")

上記のプログラムを実行すると、文字「s」を入力することで「始まったよ。」と表示させることができ、そして「むかし、むかし、あるところに、」「おじいさんとおばあさんが、すんでいました。」「おしまい」と表示する。

sを入力しなければ、「始まったよ。」などは表示されない。


break命令[編集]

while文のなかで命令「break」を使うと、whileループを中断します。

i = "b"
while 1:
    print("文字を入力しよう。sを入力で物語がスタート。(終了したい場合はqを入力)")
    i=input()
    if i == "s":
        print ("始まったよ。")
        print ("むかし、むかし、あるところに、")
        print ("おじいさんとおばあさんが、すんでいました。")
        print ("おしまい")
    if i == "q":
        break

break文で中断する対象は、if文ではない。break命令は、whileループを中断するものです。

なおwhile 1のように、while直後の条件式を数値「1」にすると、条件式「1」は「つねに真である」の意味に解釈されるので、ループになります。

同様に、while 0の条件式を「0」にすると、条件式「0」は「つねに偽である」の意味なので、whileブロック内が実行されません。

True と False[編集]

while文などの条件式において、「つねに真である」ことをあらわすキーワードとして True があります。発音は「トゥルー」と読みます。

while文などの条件式において、「つねに偽である」ことをあらわすキーワードとして False があります。発音は「フォールス」と読みます。

なお、英語で、ある物事が「真実である」ということを true といいます。falseとは、英語で「失敗」という意味です。

(コード例)

i = "b"
while true:
    print("文字を入力しよう。sを入力で物語がスタート。(終了したい場合はqを入力)")
    i=input()
    if i == "s":
        print ("始まったよ。")
        print ("むかし、むかし、あるところに、")
        print ("おじいさんとおばあさんが、すんでいました。")
        print ("おしまい")
    if i == "q":
        break

条件式としての「True」のTは、大文字でなければなりません。「true」だとエラーになり、実行できません。

また、条件式の結果を反対にするキーワードとして、「not」があります。

「not True」は、False と同じ意味です。つまり「not True」は、「偽」の意味です。

「not False」は、True と同じ意味です。つまり「not False」は、「真」の意味です。

i = "b"
while not False:
    print("文字を入力しよう。sを入力で物語がスタート。(終了したい場合はqを入力)")
    i=input()
    if i == "s":
        print ("始まったよ。")
        print ("むかし、むかし、あるところに、")
        print ("おじいさんとおばあさんが、すんでいました。")
        print ("おしまい")
    if i == "q":
        break