【Python CheckiO 题解】Army Battles


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


题目描述

【Army Battles】:这个题目是 The Warriors 的延伸题目,继上次车夫与爵士进行决斗之后,现在双方都叫了增援,在此任务中,您的任务是向现有的类和函数中添加新的类和函数。新的类别应该是 Army(),并具有 add_units() 方法,用于将选定数量的单位添加到 Army() 中,添加的第一个参数将是第一个参战的部队,第二个参数将是第二个参战的部队,此外,您还需要创建一个带有 fight() 函数的 Battle() 类,这将决定最强大的军队。 战斗按照以下原则进行:

首先,在第一军的一名士兵和第二军的一名士兵之间有一场决斗,士兵战斗时,如果其中一方生命值小于等于 0,则需要让新的士兵加入到战争中,而且新的士兵是和对方上场战斗中活下来的士兵战斗,在这种情况下,如果第一支军队获胜,则 Battle() 函数应返回 True,如果第二支军队获胜则返回 False
在这里插入图片描述
【链接】:https://py.checkio.org/mission/army-battles/

【输入】:勇士和军队

【输出】:战斗的结果(True or False)

【范例】

chuck = Warrior()
bruce = Warrior()
carl = Knight()
dave = Warrior()
mark = 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
fight(carl, mark) == False
carl.is_alive == Falsemy_army = Army()
my_army.add_units(Knight, 3)enemy_army = Army()
enemy_army.add_units(Warrior, 3)army_3 = Army()
army_3.add_units(Warrior, 20)
army_3.add_units(Knight, 5)army_4 = Army()
army_4.add_units(Warrior, 30)battle = Battle()battle.fight(my_army, enemy_army) == True
battle.fight(army_3, army_4) == False

代码实现

class Army():def __init__(self):self.health = 0self.attack = 0self.num = 0def add_units(self, x, num):self.health = x().healthself.attack = x().attackself.num = numclass Warrior:health = 50attack = 5is_alive = Trueclass Knight(Warrior):attack = 7def fight(army1, army2):while army1.health > 0:army2.health -= army1.attackarmy1.health -= army2.attackif army2.health > army1.health:army1.is_alive = Falsereturn Falseelse:army2.is_alive = Falsereturn Trueclass Battle:def fight(self, army1, army2):x2 = y2 = 0while army1.num > 0 and army2.num > 0:x1 = army1.health if x2 == 0 else x2y1 = army2.health if y2 == 0 else y2while True:y1 -= army1.attackif y1 <= 0:x2 = x1y2 = 0army2.num -= 1breakx1 -= army2.attackif x1 <= 0:y2 = y1x2 = 0army1.num -= 1breakif army1.num:return Trueelse:return Falseif __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!")if __name__ == '__main__':#These "asserts" using only for self-checking and not necessary for auto-testing#fight testschuck = 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 == False#battle testsmy_army = Army()my_army.add_units(Knight, 3)enemy_army = Army()enemy_army.add_units(Warrior, 3)army_3 = Army()army_3.add_units(Warrior, 20)army_3.add_units(Knight, 5)army_4 = Army()army_4.add_units(Warrior, 30)battle = Battle()assert battle.fight(my_army, enemy_army) == Trueassert battle.fight(army_3, army_4) == Falseprint("Coding complete? Let's try tests!")

大神解答

大神解答 NO.1

class Warrior:def __init__(self):self.health = 50self.attack = 5@propertydef is_alive(self):return self.health > 0class Knight(Warrior):def __init__(self):super().__init__()self.attack = 7def fight(u1, u2):while u1.is_alive and u2.is_alive:u2.health -= u1.attackif u2.is_alive:u1.health -= u2.attackreturn u1.is_aliveclass Army:def __init__(self):self._units = []def __getitem__(self, index):return self._units[index]def __len__(self):return len(self._units)def add_units(self, unit, count):self._units.extend(unit() for _ in range(count))class Battle:def fight(self, a1, a2):i1 = i2 = 0try:while True:u1, u2 = a1[i1], a2[i2]fight(u1, u2)i1 += not u1.is_alivei2 += not u2.is_aliveexcept IndexError:return any(u.is_alive for u in reversed(a1))

大神解答 NO.2

class Battle:def fight(self, unit_1, unit_2):i = len(unit_1.a) - 1j = len(unit_2.a) - 1while i >= 0 and j >= 0:while unit_1.a[i].hp > 0 and unit_2.a[j].hp > 0:unit_2.a[j].hp -= unit_1.a[i].atakif unit_2.a[j].hp > 0:unit_1.a[i].hp -= unit_2.a[j].atakif unit_1.a[i].hp > 0:unit_2.a.pop()j -= 1# print(unit_1.a[i].hp)else:unit_1.a.pop()i -=1# print(unit_2.a[j].hp)return len(unit_1.a) > 0class Army:def __init__(self):self.a = []def add_units(self, cl, n):for i in range(n):if cl == Warrior:n = Warrior()self.a.append(n)else:n = Knight()self.a.append(n)class Warrior:def __init__(self):self.hp = 50self.atak = 5if self.hp > 0:self.is_alive = Trueelse:self.is_alive = False      passclass Knight(Warrior):def __init__(self):self.hp = 50self.atak = 7if self.hp >= 0:self.is_alive = Trueelse:self.is_alive = Falsedef fight(unit_1, unit_2):n = 0while unit_1.hp > 0 and unit_2.hp > 0:unit_2.hp -= unit_1.atakif unit_2.hp > 0:unit_1.hp -= unit_2.atakif unit_1.hp > 0:unit_1.is_alive = Trueunit_2.is_alive = Falseelse:unit_2.is_alive = Trueunit_1.is_alive = False        return unit_1.hp > 0

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/437794.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华中科技大学文华学院 CSDN 高校俱乐部成立啦!

CSDN高校俱乐部是由中国专业的IT社区 CSDN&#xff08;Chinese Software Develop Net&#xff09;发起的&#xff0c;由全国各高校在校生代表自发加入的 IT 技术学习型组织。CSDN 由此搭建起行业与校园之间的桥梁&#xff0c;公益为各俱乐部提供行业资讯、技术学习、专家交流、…

2019年总结【跨越今天,更不平凡】

还记得小时候写作文&#xff0c;畅想2020会怎样怎样&#xff0c;光阴似箭&#xff0c;2020真的来了&#xff0c;度过了艰难的考试周&#xff0c;抽了个晚上&#xff0c;回想了一下&#xff0c;决定写一写总结吧&#xff0c;似乎以前都没写过呢&#xff0c;那干脆连带2017、2018…

Hexo博客:您备案的网站未指向阿里云国内节点(不含香港)服务器,备案号可能被取消接入

问题描述&#xff1a;经检查您的网站域名 xxxxxx 未指向阿里云国内节点&#xff08;不含香港&#xff09;服务器且无访问记录 &#xff0c;依据工信部相关法规规定属于空壳网站&#xff0c;请您尽快将域名解析IP地址指向阿里云国内节点&#xff08;不含香港&#xff09;服务器。…

【转】win10录屏快捷键报错显示需要新应用打开ms-gamingoverlay

Win10 截图快捷键 winshift s Win10 录屏快捷键 winG &#xff0c;提示&#xff1a;需要新应用打开此ms-gamingoverlay 这也是因为被你卸载了Xbox相关的应用或者文件&#xff0c;所以无法启用了。解决办法如下&#xff1a; 1.管理员方式运行powershell 快捷键&#xff1a;ct…

【转】Microsoft Cloud全新认证体系介绍

IT认证&#xff0c;是IT技术从业者必不可少的一个敲门砖&#xff0c;有了它让甲方、乙方以及原厂对你有了基本的了解&#xff0c;能够初步预判您是否胜任这一工作岗位。例如&#xff0c;大家耳熟能详的Microsoft MCSE&#xff0c;RedHat RHCE&#xff0c;VMware VCP、CISSP、CI…

【转】azure认证路线以及学习资源

Azure认证路线 考取AZ-300以及AZ-301 学习资源https://docs.microsoft.com/zh-cn/azure/https://docs.microsoft.com/zh-cn/learn/paths/azure-fundamentals/ 考试指南https://www.microsoft.com/zh-cn/learning/exam-AZ-300.aspxhttps://www.microsoft.com/zh-cn/learning/…

【转】Dynamics CRM 365零基础入门学习(一)Dynamics介绍以及开发工具配置

由于公司CRM平台从Salesforce向Dynamic 365转型&#xff0c;因此全身心投入学习了几天Dynamic 365&#xff0c;国内相关的资料很少&#xff0c;所以总结这几天学到东西&#xff0c;以避免初学者走弯路。 本章分享内容介绍 1.Dynamics的学习资料 2.Dynamics账号注册 3.Visual …

【转】Dynamics CRM 365零基础入门学习(二)Dynamics 插件注册的基本流程

插件的官方定义是&#xff1a;插件是可与 Microsoft Dynamics CRM 365 和 Microsoft Dynamics CRM Online 集成的自定义业务逻辑&#xff08;代码&#xff09;&#xff0c;用于修改或增加平台的标准行为。也可以将插件认为是针对 Microsoft Dynamics CRM 触发的事件的处理程序。…

【转】Dynamics CRM 365零基础入门学习(三)Dynamics 通过Web API 来调用自定义的Action(使用插件)

今天想实现一个Search Product的功能&#xff0c;首先要将数据展示在页面&#xff0c;然后前端根据查询需求进行处理。之前是在salesforce中实现的&#xff0c;可以定义一个Search Product的页面&#xff0c;然后在页面中访问查询数据的Webservice即可。但是在Dynamic 365中并没…

【转】Dynamics CRM 365零基础入门学习(四)Dynamics 使用profiler插件调试流程

今天我们介绍一种在dynamics开发中经常会用到的调试操作&#xff0c;其中一种调试方式即是profile调试。以下是我在项目开发中记录的调试流程&#xff0c;可供参考使用。 1、打开插件注册工具&#xff0c;会看到install Profile,点击即可安装。 2、在插件注册器中选择要调试的s…

【Python 必会技巧】利用 utf-8-sig 编码格式解决写入 csv 文件乱码问题

先举个例子&#xff0c;分别以不指定编码、指定编码为 utf-8、指定编码为 utf-8-sig 三种方式来做比较&#xff0c;再将写入 csv 文件和 txt 文件来做个对比 一、不指定编码方式&#xff0c;直接存入 csv 文件 import csvwith open(test.csv, w) as fp:writer csv.writer(fp)…

【转】Dynamics CRM 365零基础入门学习(五)权限管理

一&#xff1a;安全角色 Microsoft Dynamics 365中的安全角色是各种实体的特权和访问级别矩阵。 它们根据其功能分组在不同的选项卡下。 这些组包括&#xff1a;核心记录&#xff0c;营销&#xff0c;销售&#xff0c;服务&#xff0c;业务管理&#xff0c;服务管理&#xff0…

【转】Dynamics CRM 365零基础入门学习(七)Dynamics 365 DataMigrationUtility tool使用

SDK里有个工具叫DataMigrationUtility&#xff0c;这个工具适合两个CRM系统之间的数据迁移。例如&#xff1a;在项目上线之初会做数据初始化的工作&#xff0c;一般这个工作会在UAT开始前完成&#xff0c;当UAT完成之后再把这部分初始化数据迁移到生产环境。那我费了半天劲把数…

【转】Dynamics 365中的应用程序介绍

本人微信和易信公众号&#xff1a;微软动态CRM专家罗勇 &#xff0c;回复275或者20180630可方便获取本文&#xff0c;同时可以在第一间得到我发布的最新的博文信息&#xff0c;follow me&#xff01;我的网站是 www.luoyong.me 。 Dynamics 365引入了应用程序&#xff0c;为啥…

【转】Dynamics 365中配置和使用文件夹级别的跟踪(folder-level tracking)

本人微信和易信公众号&#xff1a;微软动态CRM专家罗勇 &#xff0c;回复274或者20180630可方便获取本文&#xff0c;同时可以在第一间得到我发布的最新的博文信息&#xff0c;follow me&#xff01;我的网站是 www.luoyong.me 。 Dynamics 365与Office 365可以方便紧密的集成…

【转】Dynamics 365Online 如何启用手机端APP的离线功能

隐约记得365自带的手机app是支持离线功能的&#xff0c;但实际尝试后发现不行&#xff0c;断开网络后直接提示下图这样&#xff0c;无法操作了 然后就去查询了下最新版的Online设置离线的方式&#xff0c;步骤还挺多的&#xff0c;本篇即来分享下 第一步&#xff0c;首先要确定…

【转】Microsoft Teams快速上手系列-01Teams的前世今生

说到Teams&#xff0c;这到底是一个什么产品&#xff1f;有人说它是团队协作工具&#xff0c;有人说它是云视频系统&#xff0c;有人说它是Hub&#xff0c;还有人说它是微软有史以来发展最快的一个产品&#xff0c;还有人说它完全是一个高效办公神器。其实都是对的。 Teams集成…

【转】响应式详解

一两年以前&#xff0c;我发现&#xff0c;很多人都被响应式搞得很懵逼。 现在&#xff0c;我依然发现&#xff0c;还是有很多人&#xff0c;依旧被响应式搞得很懵逼。 所以&#xff0c;我也很懵逼。 到底是哪个环节出了问题&#xff0c;让这么多学习前端的同学对于这个响应…

Python 数据分析三剑客之 NumPy(一):理解 NumPy / 数组基础

CSDN 课程推荐&#xff1a;《Python 数据分析与挖掘》&#xff0c;讲师刘顺祥&#xff0c;浙江工商大学统计学硕士&#xff0c;数据分析师&#xff0c;曾担任唯品会大数据部担任数据分析师一职&#xff0c;负责支付环节的数据分析业务。曾与联想、亨氏、网鱼网咖等企业合作多个…

【转】Asp.net的生命周期之应用程序生命周期

参考&#xff1a;http://msdn.microsoft.com/zh-cn/library/ms178473(vvs.100).aspx 参考&#xff1a;http://www.cnblogs.com/JimmyZhang/archive/2007/09/04/880967.html Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候&#xff0c;IIS &#xff08;Int…