2017年2月22日水曜日

りゅうおうを倒すまでの攻撃回数【Python】if文,while文

竜王のHPを130として、1回攻撃すると10のダメージを与えられるとします。

変数に入れると

HP = 130
damage = 10

となりますね。

攻撃回数はHPが0になるまでなので、HPをダメージで割り切れる場合

HP / damage が攻撃回数です



次にHPをダメージで割り切れない場合を考えます。

damage = 9 のとき、
HP / damage は 14あまり6 となり、もう一回攻撃しなければなりません。

したがってdamage = 9 のときの攻撃回数は
(HP / damage +1) となります。


ループ基本形 if文
これをif文で書くと

# -*- coding: utf-8 -*-
damage = 9
HP = 130
if HP % damage == 0:
print (int(HP/damage))
else:
print (int(HP/damage)+1)
view raw 02221 hosted with ❤ by GitHub

これはdamage = 9と固定しているので、攻撃回数は

In [1]: 15

と表示されます。


--------------------------
それでは次にif文ではなく while文で記述してみます

ループ基本形 while文

臨場感を出して出力される文字も入れてみました。

# -*- coding: utf-8 -*-
damage = 9
HP = 130
while HP > 0:
print ("りゅうおうに " + str(damage) + " のダメージ")
HP -= damage
print ("りゅうおう を たおした")
view raw 022222 hosted with ❤ by GitHub


出力結果は
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおう を たおした

となりました。



while文中でダメージの値をランダムにする

while文の場合はループの回数が決まっていないので、damageがランダムでブレたとしても攻撃回数を出力することができます


# -*- coding: utf-8 -*-
import random
HP = 130
count = 0
while HP > 0:
damage = random.randint(8,10)
print ("りゅうおうに " + str(damage) + " のダメージ")
HP -= damage
count += 1
print ("りゅうおう を" + str(count) + "かい こうげきして たおした")
view raw 02223 hosted with ❤ by GitHub

結果
りゅうおうに 8 のダメージ
りゅうおうに 10 のダメージ
りゅうおうに 10 のダメージ
りゅうおうに 8 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 10 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 10 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 10 のダメージ
りゅうおうに 10 のダメージ
りゅうおうに 9 のダメージ
りゅうおうに 10 のダメージ
りゅうおう を14かい こうげきして たおした

この例では1回のダメージを8から10としてランダム値を生成して攻撃しています。

ランダムなので実行するたびに竜王を倒すまでの攻撃回数は変化します



while文中で会心の一撃やミスを入れる

ここまできたら攻撃するだけでなく、会心の一撃やミスも入れてみましょう

# -*- coding: utf-8 -*-
import random
HP = 130
count = 0
while HP > 0:
lucky = random.randint(1,10)
print("ゆうしゃ のこうげき")
if lucky >= 9:
damage = random.randint(16,20)
print ("かいしんの いちげき!")
print ("  りゅうおうに " + str(damage) + " のダメージ")
elif lucky >= 2:
damage = random.randint(8,10)
print ("  りゅうおうに " + str(damage) + " のダメージ")
else:
damage = 0
print ("ミス")
HP -= damage
count += 1
print ("りゅうおう を" + str(count) + "かい こうどうして たおした")
view raw 02224 hosted with ❤ by GitHub


結果
ゆうしゃ のこうげき
  りゅうおうに 10 のダメージ
ゆうしゃ のこうげき
かいしんの いちげき!
  りゅうおうに 16 のダメージ
ゆうしゃ のこうげき
かいしんの いちげき!
  りゅうおうに 17 のダメージ
ゆうしゃ のこうげき
  りゅうおうに 9 のダメージ
ゆうしゃ のこうげき
  りゅうおうに 10 のダメージ
ゆうしゃ のこうげき
  りゅうおうに 9 のダメージ
ゆうしゃ のこうげき
ミス
ゆうしゃ のこうげき
  りゅうおうに 10 のダメージ
ゆうしゃ のこうげき
かいしんの いちげき!
  りゅうおうに 17 のダメージ
ゆうしゃ のこうげき
  りゅうおうに 10 のダメージ
ゆうしゃ のこうげき
かいしんの いちげき!
  りゅうおうに 18 のダメージ
ゆうしゃ のこうげき
  りゅうおうに 9 のダメージ
りゅうおう を12かい こうどうして たおした



うんのよさに応じて会心の一撃やミスの確率も変動させられますね

こんな感じでwhile文はゴール地点の値が決まっていて、ループ回数が決まっていないときに使いやすそうです

0 件のコメント:

コメントを投稿