【Python CheckiO 题解】The Warriors
CheckiO 是面向初學者和高級程序員的編碼游戲,使用 Python 和 JavaScript 解決棘手的挑戰和有趣的任務,從而提高你的編碼技能,本博客主要記錄自己用 Python 在闖關時的做題思路和實現代碼,同時也學習學習其他大神寫的代碼。
CheckiO 官網:https://checkio.org/
我的 CheckiO 主頁:https://py.checkio.org/user/TRHX/
CheckiO 題解系列專欄:https://itrhx.blog.csdn.net/category_9536424.html
CheckiO 所有題解源代碼:https://github.com/TRHX/Python-CheckiO-Exercise
題目描述
【The Warriors】:這個題目的故事大概就是說有個車夫搶了個女孩,然后被一個爵士遇到了,爵士要救這個女孩,就要和車夫決斗,將爵士和車夫命名為 Warrior 和 Knight,兩者的生命值(50點)相同但攻擊力不相同,Warrior 攻擊力為 5 點,Knight 攻擊力為 7 點,他們之間不斷來回攻擊,每一個回合,被攻擊者將減去相應的生命值,戰斗以其中之一的死亡而告終。
我們需要創建一個 Warrior 類,這個類將具有 2 個參數:生命值(50點)和攻擊力(5點),以及 1 個屬性:is_alive,如果戰士的生命值大于0,其值為 True,否則為 False。另外,還需要創建一個 Knight 類,該類是 Warrior 的子類,其攻擊力參數為 7。此外,還必須創建一個函數 fight(),該函數的功能是判斷誰是最強的,誰會活到最后。
【鏈接】:https://py.checkio.org/mission/the-warriors/
【輸入】:兩個人物賦予不同的角色
【輸出】:決斗的結果以及判斷是否活著(True or False)
【范例】:
chuck = Warrior() bruce = Warrior() carl = Knight() dave = Warrior()fight(chuck, bruce) == True fight(dave, carl) == False chuck.is_alive == True bruce.is_alive == False carl.is_alive == True dave.is_alive == False解題思路
題目已經告訴我們了,創建兩個類:Warrior 和 Knight,其中 Knight 是 Warrior 的子類,繼承其生命值的參數和是否活著的屬性,fight() 函數里面用于計算每次決斗兩者的剩余生命值,判斷其是否還活著。
代碼實現
class Warrior:health = 50is_alive = Trueattack = 5class Knight(Warrior):attack = 7def fight(unit_1, unit_2):while unit_1.health > 0:unit_2.health -= unit_1.attackunit_1.health -= unit_2.attackif unit_2.health > unit_1.health:unit_1.is_alive = Falsereturn Falseelse:unit_2.is_alive = Falsereturn Trueif __name__ == '__main__':#These "asserts" using only for self-checking and not necessary for auto-testingchuck = Warrior()bruce = Warrior()carl = Knight()dave = Warrior()mark = Warrior()assert fight(chuck, bruce) == Trueassert fight(dave, carl) == Falseassert chuck.is_alive == Trueassert bruce.is_alive == Falseassert carl.is_alive == Trueassert dave.is_alive == Falseassert fight(carl, mark) == Falseassert carl.is_alive == Falseprint("Coding complete? Let's try tests!")大神解答
大神解答 NO.1
class Warrior:def __init__(self):self.health = 50self.attack = 5@propertydef is_alive(self) -> bool:return self.health >= 0class Knight(Warrior):def __init__(self):super().__init__()self.attack = 7def fight(unit_1, unit_2):while unit_1.is_alive and unit_2.is_alive:unit_2.health -= unit_1.attackif unit_2.is_alive:unit_1.health -= unit_2.attackreturn unit_1.is_alive大神解答 NO.2
class Warrior:def __init__(self):self.health = 50self.attack_points = 5def take_damage(self, damage):self.health -= damagedef attack(self, enemy):enemy.take_damage(self.attack_points)@propertydef is_alive(self):return self.health > 0class Knight(Warrior):def __init__(self):Warrior.__init__(self)self.attack_points = 7def fight(unit_1, unit_2):while True:unit_1.attack(unit_2)if not unit_2.is_alive:return Trueunit_2.attack(unit_1)if not unit_1.is_alive:return False 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的【Python CheckiO 题解】The Warriors的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python 数据分析三剑客之 Pand
- 下一篇: 浦发万用随借金利息高吗 万用随借金利息是