【Python CheckiO 题解】The Warriors
CheckiO 是面向初學(xué)者和高級(jí)程序員的編碼游戲,使用 Python 和 JavaScript 解決棘手的挑戰(zhàn)和有趣的任務(wù),從而提高你的編碼技能,本博客主要記錄自己用 Python 在闖關(guān)時(shí)的做題思路和實(shí)現(xiàn)代碼,同時(shí)也學(xué)習(xí)學(xué)習(xí)其他大神寫的代碼。
CheckiO 官網(wǎng):https://checkio.org/
我的 CheckiO 主頁(yè):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】:這個(gè)題目的故事大概就是說(shuō)有個(gè)車夫搶了個(gè)女孩,然后被一個(gè)爵士遇到了,爵士要救這個(gè)女孩,就要和車夫決斗,將爵士和車夫命名為 Warrior 和 Knight,兩者的生命值(50點(diǎn))相同但攻擊力不相同,Warrior 攻擊力為 5 點(diǎn),Knight 攻擊力為 7 點(diǎn),他們之間不斷來(lái)回攻擊,每一個(gè)回合,被攻擊者將減去相應(yīng)的生命值,戰(zhàn)斗以其中之一的死亡而告終。
我們需要?jiǎng)?chuàng)建一個(gè) Warrior 類,這個(gè)類將具有 2 個(gè)參數(shù):生命值(50點(diǎn))和攻擊力(5點(diǎn)),以及 1 個(gè)屬性:is_alive,如果戰(zhàn)士的生命值大于0,其值為 True,否則為 False。另外,還需要?jiǎng)?chuàng)建一個(gè) Knight 類,該類是 Warrior 的子類,其攻擊力參數(shù)為 7。此外,還必須創(chuàng)建一個(gè)函數(shù) fight(),該函數(shù)的功能是判斷誰(shuí)是最強(qiáng)的,誰(shuí)會(huì)活到最后。
【鏈接】:https://py.checkio.org/mission/the-warriors/
【輸入】:兩個(gè)人物賦予不同的角色
【輸出】:決斗的結(jié)果以及判斷是否活著(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解題思路
題目已經(jīng)告訴我們了,創(chuàng)建兩個(gè)類:Warrior 和 Knight,其中 Knight 是 Warrior 的子類,繼承其生命值的參數(shù)和是否活著的屬性,fight() 函數(shù)里面用于計(jì)算每次決斗兩者的剩余生命值,判斷其是否還活著。
代碼實(shí)現(xiàn)
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 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的【Python CheckiO 题解】The Warriors的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Python 数据分析三剑客之 Pand
- 下一篇: 【Python CheckiO 题解】B