pythonの『%』を算術の『÷』と勘違いした間抜けがいるらしい・・・・・・私です
本当に恥ずかしくて泣きたくなりますねぇ!
と、そんなpythonなんですが、ふと思ったので久々にCheckiOにログインしてみました
こんな感じで解ける所だけ解いていたんですが、Homeの所に一問新しく追加されていました
(画像は解いた後なのでオレンジになっています)
今回はそこを解こうと試行錯誤したことでも書こうかな、と思います
The Warriors
技の威力が固定で命中率が100%のポケモンを再現せよ! という問題
_______________________________________________________________
class Warrior:
health = 50
is_alive = True
attack = 5
class Knight(Warrior):
attack = 7
def fight(unit_1, unit_2):
while unit_1.health > 0:
unit_2.health -= unit_1.attack
unit_1.health -= unit_2.attack
if unit_2.health>unit_1.health:
unit_1.is_alive = False
return False
else:
unit_2.is_alive = False
return True
私のpython習熟度は、構文△→関数☓→クラス☓☓
なので、個人的に解けたことが奇跡感あります
classってここまで気楽に使えるんですね・・・インスタンス?でしたっけ?
あれ定義しなくても何とかなるんですねぇ
Fortranで言う所の副プログラムのような使い勝手です
なら、Fortranで書き換えられるのでは?・・・次の課題としましょう
と、一発でこれが書けていればよかったんですがね!
class Warrior:
def __init__(self):
self.health = 0
self.attack = 0
self.is_alive = 1
def character(self):
self.health += 50
self.attack += 5
class Knight(Warrior):
def __init__(self):
super().__init__()
self.health += 50
self.attack += 7
def fight(unit_1, unit_2):
while unit_1.health == 0:
unit_2.health -= unit_1.attack
unit_1.health -= unit_2.attack
if unit_2.health>unit_1.health:
unit_1.is_alive -= 1
return False
else:
unit_2.is_alive -= 1
return True
ろくに学びもせずに使うもんじゃないですね!
CheckiOは基本的にある程度の形だけは与えてくれるんですよね
この問題だと、
class Warrior:
pass
class Knight(Warrior):
pass
def fight(unit_1, unit_2):
return 0
こう書いてくれているわけです
これを使わない手はないので、使おうとしたのですが、クラスについて私は何も分かりません
そこで何となく形が似てそうな構文を探し始めるわけですよ
で、どうも継承とやらを使うと、こんな感じの形式になると分かりました
そうして、この二つ目を書いたのですが、大きな落とし穴があったのです
"self.is_alive"の処理が一切できない
色々なパターンを見た感じ、"def init(self):"に問題がありそう・・・多分ですが
おいおいclassや関数はゆっくり学んでいけたらなーと考えています
と、こんな感じですかね
結局の所、今回を通じて言いたいことは、これ位ガバガバでもなんとかなるよ!という話
分からないから使わないより、使ってみたけどダメでしたーの方がいいんじゃないですかね?
チャレンジに無駄はないのです
以上!