if文を使えば、条件分岐をつくることができます。条件分岐なしにはゲームはつくれません。 たとえば、RPGでは押したボタンによって攻撃したり、技を使ったり、逃げたりと、様々な分岐があります。 プレイヤーが行動を選択できなければ、ただのアニメーションですからね。
1 もくじ
2 条件分岐とは
RPGのマップ移動を例に考えてみましょう。キーボード入力によって進む方向が変わります。
- Wキー → 上に進む
- Aキー → 左に進む
- Sキー → 下に進む
- Dキー → 右に進む
このようにゲームでは様々な条件によって処理を変更しています。Pythonでは、if文を用いて条件分岐を記述します。
3 if文
if文の構造を見ていきましょう。
1行目ifと:に囲まれた部分が条件を示す部分です。この例では、「aが0以上」になります。
そして、2行目は、1行目の条件を満たした時実行される部分です。インデント(参照)する必要があります。
インデントするにはtabキーを用います。
インデントした部分をブロックと言い、条件を満たした時、すぐ後ろのブロックが全て実行されます。
以下のプログラムを実行してみましょう。
a = 1
b = -1
if a > 0: # a>0であれば
print("aは正の値です")
print("a:"+str(a))
if b > 0: # b>0であれば
print("bは正の値です")
print("b:"+str(b))実行結果
aは正の値です
a:1
4 関係演算子
関係演算子は以下のような種類があります。
| 演算子 | 記述例 | 意味 |
|---|---|---|
| == | a==b | aとbが等しい |
| != | a!=b | aとbが等しくない(≠) |
| > | a>b | aがbより大きい |
| < | a<b | aがbより小さい |
| >= | a>=b | aがb以上 |
| <= | a<=b | aがb以下 |
試しに、以下の文を実行してみましょう。
実行結果
True
True
False
False
==や<といった関係演算子は、その式が正しいかどうかを「True(真)」か「False(偽)」で出力します。
つまり、if文はif:の後ろが「True」なら実行するという仕組みになっています。ためしに、条件の代わりにTrueやFalseを入れてみると、Trueの方のみが出力されます。
実行結果
実行される
数値を入れるとどうなるか
Pythonでは、0 は「False(偽)」と、0以外の数値 は「True(真)」とみなされます。
実行結果
1:実行される
5:実行される
0.1:実行される
この性質を利用したプログラムがこちらです。
%は
「余り」を計算する演算子です。つまり、n % 2は
n
を2で割った余りを計算します。nが奇数の場合、余りは1になります。これは「True(真)」とみなされ、print(“奇数”)
が実行されます。
逆に、nが偶数の場合、余りは0になります。これは「False(偽)」とみなされ、print(“奇数”)
は実行されません。
5 if-else文
elseを用いて、条件が満たされなかったときの処理を設定することができます。
import random
weight = random.randint(10,50)/10 #1.0から5.0までの乱数
if weight > 3: # weight>3であれば
print(str(weight)+"kgの大物が釣れた!")
else: # weight>3でなければ
print(str(weight)+"kgの魚が釣れた!")weightが3より大きいとき、条件を満たすので、「XXkgの大物が釣れた!」と出力されます。weightが3以下のとき、条件を満たさないので、「XXkgの魚が釣れた!」と出力されます。
if-else文を入れ子にすることで、細かく条件を設定することができます。
import random
weight = random.randint(10,50)/10 #1.0から5.0までの乱数
if weight > 4: # weight>4であれば
print(str(weight)+"kgの超大物が釣れた!")
else: # weight>4でなければ
if weight > 3: # weight>3であれば
print(str(weight)+"kgの大物が釣れた!")
else: # weight>3でなければ
print(str(weight)+"kgの魚が釣れた!")もっと細かく条件を分けたければ、もっとif文を入れ子にすれば良いわけです。 しかし、それではどんどんプログラムが複雑になってしまいます。 入れ子が増えた構造はネストとよばれ、わかりやすいプログラムにするためにはなるべくネストを避ける工夫が必要です。 このような処理を行いたい際には次のif-elif文を用います。
6 if-elif文
elifを用いて上のプログラムをもっとスマートに書くことができます。
import random
weight = random.randint(10,50)/10 #1.0から5.0までの乱数
if weight > 4: # weight>4であれば
print(str(weight)+"kgの超大物が釣れた!")
elif weight > 3: # weight>3であれば
print(str(weight)+"kgの大物が釣れた!")
else: # weight>3でなければ
print(str(weight)+"kgの魚が釣れた!")if文とif-elif文の違い
下の二つのプログラムを実行して、違いを確認しましょう。
weight = 4.5
if weight > 4: # weight>4であれば
print(str(weight)+"kgの超大物が釣れた!")
if weight > 3: # weight>3であれば
print(str(weight)+"kgの大物が釣れた!")weight = 4.5
if weight > 4: # weight>4であれば
print(str(weight)+"kgの超大物が釣れた!")
elif weight > 3: # weight>3であれば
print(str(weight)+"kgの大物が釣れた!")実行結果(if文)
4.5kgの超大物が釣れた!
4.5kgの大物が釣れた
実行結果(elif文)
4.5kgの超大物が釣れた!
if文の場合、条件が複数満たされると、それぞれの処理が実行されます。
一方でif-elif文の場合、最初に満たされた条件の処理だけが実行され、その後の条件は無視されます。
これらの動作を図解すると以下のようになります。
if文の場合
elif文の場合
この図は状態遷移図と呼ばれ、プログラムの構造を理解する際に役に立ちます。
if-elif文が用いられる代表的な例としては、キーボードによるキャラクター移動が挙げられます。
key = "w"
if key == "w":
print("奥に進みます")
elif key == "a":
print("左に進みます")
elif key == "s":
print("手前に進みます")
elif key == "d":
print("右に進みます")
else:
print("不正な入力です")7 論理演算子
条件分岐をする際に、もう一つ重要になるのが論理演算子です。複数の条件を記述する際に用います。 論理演算子は以下のような種類があります。
| 演算子 | 記述例 | 意味 |
|---|---|---|
| and | a>b and a>c | a>b かつ a>c |
| or | a>b or a>c | a>b または a>c |
| not | not a>b | a>b でない |
7.1 andを用いる例
ゲームにおける買い物を例に考えます。
アイテム:丈夫な釣り竿
価格:500
プレイヤーのレベル制限:20
この場合、以下の条件をどちらも満たす必要があります。
- 所持金が500以上
- プレイヤーのレベルが20以上
すなわち、以下のようになります。
7.2 orを用いる例
キーボードによるキャラクター移動をWASDと矢印キー両方に対応できます。
key = "w"
if key == "w" or key =="Up":
print("奥に進みます")
elif key == "a" or key =="Left":
print("左に進みます")
elif key == "s" or key =="Down":
print("手前に進みます")
elif key == "d" or key =="Right":
print("右に進みます")
else:
print("不正な入力です")7.2.1 Challenge7
先ほどのプログラムを改造してみましょう。新しいファイルchallenge7.pyを作成してください。
アイテム:丈夫な釣り竿
価格:500
プレイヤーのレベル制限:20
level = 25 #プレイヤーのレベル
money = 999 #所持金
if money >= 500 and level >= 20:
print("丈夫な釣り竿を手に入れた!")
# ここに条件を追加する次の課題に挑戦してください。できたと思ったら所持金を200に変えて実行してみて正しく動作するか確認してください。
7-1 elifを用いて、所持金が足りなければ
所持金が足りませんというメッセージを表示させる。7-2 所持金が足りなければ、足りない金額を計算して、
所持金がxx円足りませんというメッセージを表示させる
ヒント1不足金額の計算方法: 不足金額 = 500 - money
ヒント2メッセージの結合: 文字列は+を用いて結合できます
ヒント3数値を文字列に変換: str()関数で数値を文字列に変換できます
スクロールして答えを確認してください