ICON公式ブログ

ICON公式ブログ

静岡大学コンテンツ制作サークルICONの公式ブログです

【pythonではじめるゲームプログラミング 第2回】順次、分岐

f:id:iconcreator:20210517053626p:plain


今回の記事はICONのpython勉強会の資料として書かれました。

担当は ふれうと です



はじめに


今回はプログラムにおける順次と分岐について学びます。

順次分岐反復の3つはプログラムの基本処理です。

この3つができれば、自分で好きなプログラムを書くことができる(と言っても過言ではありません)!

それでは早速プログラミングを始めましょう。


前回の記事


iconcreator.hatenablog.com


Step 2-1 順次処理


順次処理とは、

「プログラムの上の行から順に処理が行われる」

ということです。


極めて当たり前のことのようですよね。

分かりやすい例を一つ挙げましょう。

以下のプログラムを、デスクトップの「ICONPythonLesson」フォルダに作成し、

「serial.py」という名前で保存してください。

print("一つ目の順次処理")
x = 10
print(x)
x += 5
print(x)
x *= 3
print(x)

print("二つ目の順次処理")
y = 10
print(y)
y *= 3
print(y)
y += 5
print(y)


ここで、はじめて見るであろうx += 5x = x + 5と同様の意味です。

変数xの値を5増やしたい時にはx = x + 5と書くことで、それを実行できます。

代入先である変数xに自身を代入するというのは少し不思議な感じがあるかもしれません。

x += 5はその省略記法です。

同様にx *= 3x = x * 3の省略記法です。


作成できたら、コマンドプロンプトを起動し、実行してみましょう。

コマンドプロンプトでの実行方法は

cd Desktop/ICONPythonLesson
python serial.py

です。


結果は以下のようになると思います。

一つ目の順次処理
10
15
45
二つ目の順次処理
10
30
35

一つ目の順次処理と二つ目の順次処理では結果が違っていますね。

これは、上の行から順に処理が行われていくことによって、加算と乗算の順序が変わり、結果に反映されたということです。


Step 2-2 分岐処理


分岐処理とは、

「条件によって次に行われる処理が変わる」

ということです。


pythonの分岐処理では、if文というものが使われます。

(あと、elif文とelse文も使われます)


if文


pythonにおけるif文の書き方は以下のようになります。

if (条件文):
    (条件文を満たしたとき実行される処理)

ここで、注意点は

pythonではインデント(字下げ)が重要になっています。

if文の中の「条件文を満たしたとき実行される処理」を書く時には、インデントをする必要があります。

インデントはスペースを4(あるいは2)回押すか、Tabキーを押すことで出来ます。

(Tabキーで行う事を強く推奨します。)

(あと、インデントはスペース4つ分派とスペース2つ分派がいるらしいです。好きな方を選べば良いと思います。エディタatomはTabキーを押したとき、スペース何個分インデントするか設定できたと思います。)


具体例を見ていきましょう。

以下のプログラムを、デスクトップの「ICONPythonLesson」フォルダに作成し、

「branch.py」という名前で保存してください。

x = int(input())

if x > 500:
    print("500より大きい!")


作成出来たら、コマンドプロンプトで実行してみましょう。

python branch.py


input()があるので、好きな数字を打ち込んでみましょう。

python branch.py
100
python branch.py
400
python branch.py
1000
500より大きい!

python branch.py
30000
500より大きい!

上記のように、500より大きい数値を入力したときのみ、

「500より大きい!」と表示されると思います。


これは、「branch.py」プログラムの中の

if x > 500:
    print("500より大きい!")

の条件文(条件式)であるx > 500が満たされた時のみ、

処理文であるprint("500より大きい!")が実行されるということです。


比較演算子


条件式で用いられる>などを比較演算子と呼びます。

基本的な比較演算子をまとめた表が以下になります。

比較演算子 説明
== 左辺と右辺が等しい
!= 左辺と右辺が異なる
> 左辺が右辺より大きい
>= 左辺が右辺以上
< 左辺が右辺より小さい
<= 左辺が右辺以下

ここで注意すべきは

左辺と右辺が等しいかを比較する演算子==であることです。

プログラミングにおいては、=は代入であると前回説明しました。

なので、両辺が等しいかを比較するときは==になります。


else文


では、「branch.py」を改造して、

入力された値が500を超えていた場合、「500より大きい!」と表示され、

入力された値が500以下だった場合、「500以下~」と表示されるようにしてみましょう。





↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

できました?

できたら、下を見てみましょう

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓




こんなプログラムが考えられるかもしれません。

x = int(input())

if x > 500:
    print("500より大きい!")

print("500以下~")

実行してみましょう。

おや、これだと入力した数値が500以下の時は良いですが、

500を超えたときも「500以下~」と表示されてしまいますね。

python branch.py
300
500以下~

python branch.py
600
500より大きい!
500以下~

↑実行結果画面


では、そこを踏まえると、次のようなプログラムになるかもしれません。

x = int(input())

if x > 500:
    print("500より大きい!")

if x <= 500:
    print("500以下~")

これなら正しい結果が得られますね。

python branch.py
300
500以下~

python branch.py
800
500より大きい!

python branch.py
500
500以下~


今回の「入力された数値が500を超えている」と「入力された数値が500以下」という条件は排反です。

(排反...二つの事象が同時に起こりえないこと)

こういった排反事象を簡略化して記述できる方法があります。

それが、else文です。


pythonにおけるelse文の書き方は以下のようになります。

if (条件文):
    (条件文を満たしたとき実行される処理)
else:
    (条件文が満たされなかったとき実行される処理)


先ほどのプログラムをelse文を用いて書くと

x = int(input())

if x > 500:
    print("500より大きい!")
else:
    print("500以下~")

実行して、結果を確かめてみてください。


論理演算子


if文において、複数の条件を条件文にしたいとき、論理演算子を用いることで実装できます。


以下が基本的な論理演算子です。

論理演算子 説明
A and B AとBの条件が共に満たされていれば、条件を満たす
A or B AかBの条件のどちらかが満たされていれば、条件を満たす
not A Aの条件が満たされていなけば、条件を満たす

(ここで、条件という書き方をしましたが、本来はbool値で演算されます。)


次のような条件を考えてみましょう。

///////////////////////////

xさんとyさんがおり、それぞれはお金をある値持っています。

あるお店に行くとき、その店の想定予算を二人とも持っている場合

そのお店に行けます。

///////////////////////////


これを実装するプログラムを考えます。

「branch.py」を以下のように改変してみましょう。

(ここでは店の想定予算を500とします)

print("xの値を入力")
x = int(input())
print("yの値を入力")
y = int(input())

if x >= 500 and y >= 500:
    print("店に入れる!")
else:
    print("店に入れない...")

実行して結果を確かめてみましょう。


ちなみに、論理演算子を用いず、if文を二重にする(if文の中にif文を書く)という実装方法もあります。

print("xの値を入力")
x = int(input())
print("yの値を入力")
y = int(input())

if x >= 500:
    if y >= 500:
        print("店に入れる!")
    else:
        print("店に入れない...")
else:
    print("店に入れない...")

場合によっては、こちらのやり方が理解しやすい場合もあります。

今回はprint("店に入れない...")が2回出てきてしまい、わかりにくくなってしまいました。


他にも

///////////////////////////

xさんとyさんがおり、それぞれはお金をある値持っています。

今日はどちらか、お金に余裕がある方が奢ることにしました。

あるお店に行くとき、その店の想定予算のどちらかが持っている場合

そのお店に行けます。

///////////////////////////

などの条件を考えてプログラムを組むことも出来ます。


elif文


では、さらに「branch.py」を改造して、

入力された値が5000を超えていた場合、「5000より大きい!すごい!」と表示され、

入力された値が500を超えていて、かつ5000以下の場合、「500より大きい!」と表示され、

入力された値が500以下だった場合、「500以下~」と表示されるようにしてみましょう。



↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

できました?

できたら、下を見てみましょう

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓



このようなプログラムが考えられます。

print("xの値を入力")
x = int(input())

#yの入力は無効化しておきましょう
#print("yの値を入力")
#y = int(input())

if x > 5000:
    print("5000より大きい!すごい!")
if x > 500 and x <= 5000:
    print("500より大きい!")
if x <= 500:
    print("500以下~")

実行処理が3パターン以上になると、else文を使えず、

正しい条件と共にif文を複数書かねばならないと考えたことと思います。

(他にも、if文を二重にした方法などでも実装できます。)


こうした状況に有効なのが、elif文です。

(他言語では「else if 文」だったりします。)


pythonにおけるelif文の書き方は以下のようになります。

if (条件文1):
    (条件文1を満たしたとき実行される処理)
elif (条件文2):
    (条件文1が満たされず、条件文2を満たしたとき実行される処理)
else:
    (条件文1も条件文2も満たされなかったとき実行される処理)

ちなみにelif文は複数書くことも出来ます。


以上を踏まえ、先のプログラムをelif文を用いて書くと、

print("xの値を入力")
x = int(input())

#yの入力は無効化しておきましょう
#print("yの値を入力")
#y = int(input())

if x > 5000:
    print("5000より大きい!すごい!")
elif x > 500:
    print("500より大きい!")
else:
    print("500以下~")

実行結果が正しいか確認してみましょう。


終わりに

今回の記事では順次処理と分岐処理について学びました。

次回、反復処理を学ぶことで、非常に幅広い実装が可能になります。

楽しみにしてください。


第三回の記事はこちら ♪


iconcreator.hatenablog.com