Pythonで釣りゲームを作ろう 基礎編7 if文

最終更新日:2024年10月29日(火)


if文を使えば、条件分岐をつくることができます。条件分岐なしにはゲームはつくれません。 たとえば、RPGでは押したボタンによって攻撃したり、技を使ったり、逃げたりと、様々な分岐があります。 プレイヤーが行動を選択できなければ、ただのアニメーションですからね。

1 もくじ

2 条件分岐とは

img

RPGのマップ移動を例に考えてみましょう。キーボード入力によって進む方向が変わります。

このようにゲームでは様々な条件によって処理を変更しています。Pythonでは、if文を用いて条件分岐を記述します。

3 if文

if文の構造を見ていきましょう。

if a > 0:
  print("aは正の値です")

1行目if:に囲まれた部分が条件を示す部分です。この例では、「aが0以上」になります。

そして、2行目は、1行目の条件を満たした時実行される部分です。インデント(参照)する必要があります。 インデントするにはtabキーを用います。

インデントした部分をブロックと言い、条件を満たした時、すぐ後ろのブロックが全て実行されます

if 条件:
  処理A
  処理B
  処理C
  ...

以下のプログラムを実行してみましょう。

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以下


試しに、以下の文を実行してみましょう。

n = 5
print(n>3)
print(n == 5)
print(n < 3)
print(n != 5)

実行結果

True
True
False
False

==<といった関係演算子は、その式が正しいかどうかを「True(真)」か「False(偽)」で出力します。

つまり、if文はif:の後ろが「True」なら実行するという仕組みになっています。ためしに、条件の代わりにTrueFalseを入れてみると、Trueの方のみが出力されます。

if True:
  print("実行される")

if False:
  print("実行されない")

実行結果

実行される


数値を入れるとどうなるか

Pythonでは、0 は「False(偽)」と、0以外の数値 は「True(真)」とみなされます

if 1:
  print("1:実行される")

if 5:
  print("5:実行される")

if 0.1:
  print("0.1:実行される")

if 0:
  print("0:実行されない")

実行結果

1:実行される
5:実行される
0.1:実行される

この性質を利用したプログラムがこちらです。

n = 27
if n%2:
  print(str(n)+"は奇数です")

%「余り」を計算する演算子です。つまり、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の魚が釣れた!")

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文の場合 img


elif文の場合 img

この図は状態遷移図と呼ばれ、プログラムの構造を理解する際に役に立ちます。


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

この場合、以下の条件をどちらも満たす必要があります。

すなわち、以下のようになります。

level = 25 #プレイヤーのレベル
money = 999 #所持金

if money >= 500 and level >= 20:
  print("丈夫な釣り竿を手に入れた!")

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に変えて実行してみて正しく動作するか確認してください。

 ヒント1不足金額の計算方法: 不足金額 = 500 - money

 ヒント2メッセージの結合: 文字列は+を用いて結合できます

 ヒント3数値を文字列に変換: str()関数で数値を文字列に変換できます

スクロールして答えを確認してください










level = 25 #プレイヤーのレベル
money = 200 #所持金

if money >= 500 and level >= 20:
  print("丈夫な釣り竿を手に入れた!")
elif money < 500:
  print("所持金が足りません")
level = 25 #プレイヤーのレベル
money = 200 #所持金

if money >= 500 and level >= 20:
  print("丈夫な釣り竿を手に入れた!")
elif money < 500:
  print("所持金が"+str(500-money)+"円足りません")