最近在负责公司一个语音的微服务模块优化,这个模块主要的业务是:1.天猫精灵、小度、若琪、小京鱼、小爱同学、思必驰这些第三方音响对我们的用户进行oauth2/JWT授权; 2.这些第三方音响服务调用我们的设备发现接口对公司的设备信息在第三方平台进行一个存储;3.第三方平台对用户发出的语音进行解析,然后识别出需要控制的设备再调用我们的设备控制接口对公司的设备进行控制;
上述发现、控制接口分别写了五个API,并且在Controller层有着大量的业务校验,然后再在Controller层调用Service层的设备发现、控制方法;这些业务校验的逻辑一模一样;
字有点不好看,兄dei们献丑了,嘿嘿
public interface VoiceStrategyService { /** * @description: 语音控制API * @param: [jsonObject] * @return: com.alibaba.fastjson.JSONObject * @author: zhouhong * @date: 2023/5/18 9:34 */ JSONObject operateApi(@RequestBody JSONObject jsonObject); }
其他几个语音实现类实现上面的那个策略接口,每个策略实现类对应一个业务场景,实现具体的方法逻辑。
@Service @Log4j2 public class AliGenieServiceImpl implements VoiceStrategyService { @Override public JSONObject operateApi(JSONObject jsonObject) { log.info("天猫精灵-设备发现/控制成功!"); return null; } }
@Service @Log4j2 public class DuerOSServiceImpl implements VoiceStrategyService { @Override public JSONObject operateApi(JSONObject jsonObject) { log.info("小度-设备发现/控制成功!"); return null; } }
@Service @Log4j2 public class RokidServiceImpl implements VoiceStrategyService { @Override public JSONObject operateApi(JSONObject jsonObject) { log.info("若琪-设备发现/控制成功!"); return null; } }
@Service @Log4j2 public class RokidServiceImpl implements VoiceStrategyService { @Override public JSONObject operateApi(JSONObject jsonObject) { log.info("若琪-设备发现/控制成功!"); return null; } }
/** * @description: 语音策略上下文 * @author: zhouhong * @date: 2023/5/20 14:27 * @version: 1.0 */ public class VoiceStrategyContext { @Resource private VoiceStrategyService voiceStrategyService; private void setVoiceStrategy(VoiceStrategyService voiceStrategyService) { this.voiceStrategyService = voiceStrategyService; } private JSONObject executeStrategy(JSONObject jsonObject) { if (voiceStrategyService != null) { return voiceStrategyService.operateApi(jsonObject); } return null; } /** * @description: 根据传过来的KEY值选择具体的策略 * @return: com.alibaba.fastjson.JSONObject * @author: zhouhong * @date: 2023/5/20 15:03 */ public JSONObject executeStrategyByKey(String key, JSONObject jsonObject) { switch (key) { case "aliGenie" : { this.setVoiceStrategy(new AliGenieServiceImpl()); return this.executeStrategy(jsonObject); } case "duerOS" : { this.setVoiceStrategy(new DuerOSServiceImpl()); return this.executeStrategy(jsonObject); } case "rokid" : { this.setVoiceStrategy(new RokidServiceImpl()); return this.executeStrategy(jsonObject); } default: { return null; } } } }
这个如果在下一层调用时知道自己需要调用哪个策略,那么 executeStrategyByKey() 方法可以直接忽略,具体调用如下所示:
/** * @description: 测试类 * @author: zhouhong * @date: 2023/5/20 15:06 * @version: 1.0 */ public class TextMain { public static void main(String[] args) { VoiceStrategyContext voiceStrategyContext = new VoiceStrategyContext(); JSONObject jsonObject = new JSONObject(); // 天猫精灵 voiceStrategyContext.setVoiceStrategy(new AliGenieServiceImpl()); voiceStrategyContext.executeStrategy(jsonObject); // 小度 voiceStrategyContext.setVoiceStrategy(new DuerOSServiceImpl()); voiceStrategyContext.executeStrategy(jsonObject); // 若琪 voiceStrategyContext.setVoiceStrategy(new RokidServiceImpl()); voiceStrategyContext.executeStrategy(jsonObject); } }
结果:
15:12:38.474 [main] INFO com.zhouhong.designpattern.strategy.service.impl.AliGenieServiceImpl - 天猫精灵-设备发现/控制成功!
15:12:38.477 [main] INFO com.zhouhong.designpattern.strategy.service.impl.DuerOSServiceImpl - 小度-设备发现/控制成功!
15:12:38.477 [main] INFO com.zhouhong.designpattern.strategy.service.impl.RokidServiceImpl - 若琪-设备发现/控制成功!
这个比较简单,直接选中需要提取的代码块 Windows系统中 按住Ctrl 和 Alt 再加 M 键,就可以快速的将需要提取的代码从方法中抽离出来,然后新建一个Service层接口对其进行实现即可,主要示例代码如下:
/** * @description: 语音控制公共方法抽取 * @author: zhouhong * @date: 2023/5/17 10:58 * @version: 1.0 */ public interface VoiceCommonApiService { /** * @description: 语音控制公共方法抽取 -- RequestBody格式 * @param: [jsonObject, platform] * @return: com.alibaba.fastjson.JSONObject * @author: zhouhong * @date: 2023/5/17 11:00 */ JSONObject voiceRequestBodyCommonApi(JSONObject jsonObject, String platform); }
/** * @description: 语音公共方法抽离 * @author: zhouhong * @date: 2023/5/17 11:00 * @version: 1.0 */ @Service @Log4j2 public class VoiceCommonApiServiceImpl implements VoiceCommonApiService { @Resource private VoiceStrategyContext voiceStrategyContext; @Override public JSONObject voiceRequestBodyCommonApi(JSONObject jsonObject, String platform) { log.info("大量逻辑校验代码......"); voiceStrategyContext.executeStrategyByKey(platform, jsonObject); log.info("其他业务代码......"); return null; } }
优化完工
策略模式是一种行为型设计模式,它允许在运行时选择算法的行为。该模式将不同的算法封装在各自独立的策略类中,使得它们可以互相替换,而不会影响到客户端代码。
环境类(Context):环境类持有一个策略对象,并在需要执行算法时调用策略对象的方法。它提供了一个接口供客户端代码设置策略对象。
抽象策略类(Strategy):定义了策略对象的接口或抽象类。它描述了算法的通用行为,可以包含算法的输入参数。
具体策略类(Concrete Strategy):实现了策略接口或继承了抽象策略类,并提供了具体的算法实现
客户端代码创建一个环境对象(Context)。
客户端根据需求选择一个具体策略类,并将其设置到环境对象中。
环境对象在需要执行算法的时候,调用所持有的策略对象的方法。
策略对象根据自身的算法实现进行处理,并返回结果给环境对象。
客户端通过环境对象获取算法的结果。
多种算法选择:当有多个算法可供选择,且需要在运行时动态选择其中一种算法时,可以使用策略模式。例如,在图像处理中,可以根据不同的要求选择不同的压缩算法。
避免条件语句:当代码中存在大量的条件语句用于根据不同条件执行不同的行为时,可以考虑使用策略模式来替代这些条件语句。策略模式将每种行为封装在单独的策略类中,使代码更加清晰、可维护。
动态配置行为:当需要动态地配置对象的行为时,可以使用策略模式。例如,在电商系统中,可以根据用户的会员级别,动态选择不同的折扣策略。
可扩展性:策略模式提供了一种可扩展的方式,允许添加新的策略类来满足新的需求,而无需修改现有代码。这种灵活性使得策略模式在需要频繁添加新的算法或行为的情况下非常有用。
单一职责原则:策略模式可以将不同的算法或行为分离到各自的策略类中,遵循了单一职责原则,使得每个类只关注自己的策略实现。
优点:
缺点:
http://github.com/Tom-shushu/work-study.git 代码中的 design-pattern 项目
本文来自博客园,作者:Tom-shushu,转载请注明原文链接:http://www.cnblogs.com/Tom-shushu/p/17417295.html
IPvalidates_format_of:ip,:with=>/^((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$/reg=/^((\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])\.){3}(\d|[1-9]\d|1\d{2}|2[0-4]\d|25[0-5])$/ @ip.errors.add(:ip,”格式不正确。”)if!reg.match(@ip.ip)validates_format_of:email,:with=>/\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i,:if=>:email?(function($){ $.fn.validationEngineLanguage=function(){ }; $.validationEngineLanguage={ newLang:function(){ //Someregularexpressionswereappend"|
我们提出了二维有限孔径散射问题的单站采样方法。直接采样法(DSM)是一种稳健、稳定和快速的数值方法,用于在只有一个或两个入射场的情况下对多站测量的不均匀性进行成像。然而,在实际应用中,经常遇到有限孔径结构中的单站测量。在最近的文献中,研究了全孔径结构下的单站采样方法(MSM)。在本文中,我们发展了有限孔径结构中的MSM,并推导了相应指示函数的渐近公式。基于渐近公式,我们分析了所提出的方法的成像性能取决于测量方向的范围和非均匀性的几何、材料特性。此外,我们提出了一种改进的多频率测量数值格式,以提高成像性能,特别是对于小异常。数值模拟验证了分析结果。原文题目:Monostaticsamplingmethodsinlimited-apertureconfiguration原文:Wepresentmonostaticsamplingmethodsforlimited-aperturescatteringproblemsintwodimensions.Thedirectsamplingmethod(DSM)iswellknowntoprovidearobust,stable,andfastnum
简介Kibana是一个针对Elasticsearch的开源分析及可视化平台,使用Kibana可以查询、查看并与存储在ES索引的数据进行交互操作,使用Kibana能执行高级的数据分析,并能以图表、表格和地图的形式查看数据。Kibana安装和使用安装Kibana下载: 注意Kibana版本需要和Elasticsearch一致。cd/opt/ wgethttps://artifacts.elastic.co/downloads/kibana/kibana-7.12.1-linux-x86_64.tar.gz复制解压:tar-zxvfkibana-7.12.1-linux-x86_64.tar.gz复制修改Kibana配置文件修改/opt/kibana-7.12.1-linux-x86_64/config/kibana.yml:server.port:5601 server.host:"10.0.2.15" elasticsearch.hosts:["http://localhost:9200"]复制server.port:kibana端口,默认为560
LeetCode笔记:WeeklyContest2380.赛后总结1.题目一1.解题思路2.代码实现2.题目二1.解题思路2.代码实现3.题目三1.解题思路2.代码实现3.算法优化4.题目四1.解题思路2.代码实现0.赛后总结因为一些众所周知的原因,这周的比赛实际上是没有参加的,就是在赛后补做了以下题目,然后在这里整理了一下,与君共勉。1.题目一给出题目一的试题链接如下:1837.SumofDigitsinBaseK1.解题思路这一题没啥难度,就是将原数用k进制表达出来然后计算一下每一位的数值之和而已。2.代码实现给出python代码实现如下:classSolution: defsumBase(self,n:int,k:int)->int: res=0 whilen!=0: res+=n%k n=n//k returnres复制提交代码评测得到:耗时28ms,占用内存14.2MB。2.题目二给出题目二的试题链接如下:1838.FrequencyoftheMostFrequentElement1.解题思路这一题的关键点在于数据只能增不能减,因此,我们首先对所有的数字进行一个排序,然
这学期我上的另一门课是本科生的《深度学习》,主要用的是吴恩达老师的《深度学习》视频课的内容。 本章内容见“授课计划”的标红部分 使用教材:吴恩达《深度学习》课程笔记,这门课基本按照吴恩达老师的课程进度进行,但使用的深度学习框架我改成了PyTorch。 课外参考书:《深度学习》,人民邮电出版社,IANGOODFELLOW等,2017年出版 课程资源下载链接(吴恩达老师的深度学习课程笔记以及相关资源): https://github.com/fengdu78/deeplearning_ai_books授课计划模块1课程导学以及深度学习简介模块2神经网络基础模块3浅层神经网络和反向传播算法实验一模块4深层神经网络实验一模块5Pytorch基础知识讲解实验二模块6深度学习实践模块7优化算法实验三模块8卷积神经网络基础模块9经典网络实验四模块10ResNets的原理及应用模块11目标检测的原理和常见算法实验五模块12人脸识别与风格转换模块13循环神经网络实验五模块14GRU/LSTM/BIRNN实验六模块15自然语言与词嵌入模块16序列模型与注意力机制实验六期末考核课件(二、神经网络基础)备注:
今天,又是干货满满的一天。这是全网最硬核JVM系列的开篇,首先从TLAB开始。由于文章很长,每个人阅读习惯不同,所以特此拆成单篇版和多篇版 全网最硬核JVMTLAB分析(单篇版不包含额外加菜)全网最硬核JVMTLAB分析1.内存分配思想引入全网最硬核JVMTLAB分析2.TLAB生命周期与带来的问题思考全网最硬核JVMTLAB分析3.JVMEMA期望算法与TLAB相关JVM启动参数全网最硬核JVMTLAB分析4.TLAB基本流程全分析全网最硬核JVMTLAB分析5.TLAB源代码全解析全网最硬核JVMTLAB分析6.TLAB相关热门Q&A汇总全网最硬核JVMTLAB分析(额外加菜)7.TLAB相关JVM日志解析全网最硬核JVMTLAB分析(额外加菜)8.通过JFR监控TLAB11.TLAB相关JVM日志解析11.1.准备JavaWhiteBoxAPI首先需要准备好JavaWhiteBoxAPI11.1.1.什么是WhiteBoxAPIWhiteBoxAPI是HotSpotVM自带的白盒测试工具,将内部的很多核心机制的API暴露出来,用于白盒测试JVM,压测JVM特性,以及辅助学
PDF文件的重要性毋庸置疑,国自然上传需要PDF文件,很多SCI投稿需要上传PDF文件,哪怕换个电脑打开为了避免格式混乱,你也需要用到PDF文件。可以说PDF文件贯穿你的科研生涯,可见它是多么重要。然而,有一个现实问题,你目前还玩不转。结合我日常使用中的痛点,今天跟大家分享三个软件,解决PDF使用中遇到的99%的问题。1、CAJ文件转换为PDF科研工作中,中国知网是一个使用率比较高的网站,尤其是查找博硕士论文的时候,但是很多文章只提供CAJ格式下载。这并不方便我们管理文献,因为大多数文献都是PDF格式的,这就需要我们把CAJ格式文件进行转换。知网提供的CAJviewer就能够解决这个问题。具体方法如下:打开一篇CAJ格式的文章,点击“文件”下拉菜单中的“打印”选项。在弹出的“打印”窗口下拉菜单中选择“MicrosoftPrinttoPDF”,点击确定。之后保存到桌面上,就能得到相应的PDF文件了。2、PDF阅读、合并、转换、编辑、加密一站式解决PDF文件的好处是清晰、固定,相应的坏处就是不容易编辑。我试用了多种PDF编辑软件,发现iskysoft的PDFEditorPro最为简洁好用,
专注Vue源码分享,为了方便大家理解,分为了白话版和源码版,白话版可以轻松理解工作原理和设计思想,源码版可以更清楚内部操作和Vue的美,喜欢我就关注我的公众号,好吧兄弟,不会让你失望的阅读源码是需要很多的勇气的,特别是对这种Vue源码的框架,十分抽象,使用了好多设计模式,封装得十分精密。很难短时间内能看得明白。而我显然也是做好了心里准备和知识准备啦我老早就想攻破Vue源码这座城堡但是显然我当时还没有做好准备,我认为自己不可以贸然去看,不然自己烦,自己累,还难以收获本篇文章算是一个简单地吹水,就是跟大家谈谈我的感想,没有什么知识含量,其实也有的。阅读源码准备了什么1、掌握Vue所有API我把Vue的所有API都详细研究使用过了一遍,而且尽量在项目中都有使用,让自己有深一点的体会而且我对着官方文档,一个个做了详细的笔记,而且联想过了使用场景。2、JavaScript扎实基础幸好自己之前花了大力气去给自己打基础,让自己现在的JavaScript基础还算不错。逼着自己把很多本JavaScript书都看完了,并且做了详细笔记。像是【JavaScript易维护】【JavaScript性能】,【Ja
作为一名龙珠迷,最近Steam爆火的《龙珠斗士Z》自然引起了小编的关注。《龙珠格斗Z》刚上线Steam不到两周,就已经登上了Steam畅销榜第二名(第一名还用说嘛),并且还收获了特别好评。不过它268元的价格确实把小编唬住了,作为一款格斗游戏的确太贵了。虽然略有些遗憾,但我们的童年当然不止《龙珠》啦!据悉,一款名为《Neon》的复古街机VR游戏今日凌晨登陆Steam了,感兴趣的同学们不妨了解一下。 《Neon》在去年11月就已经登陆了OculusRift,这是由独立游戏开发团队Galactig带来的一款复古迷幻VR射击游戏。近日,该工作室宣布,Neon已经登陆Steam,并同步支持HTCVive和WindowsMR头显。《Neon》中的游戏场景采用矢量多边形线条和脉冲霓虹灯设计,这些都是80年代的风格。游戏中,你将控制一台位于太阳内部的离子炮。你的任务就是使用位于左右手柄上的正离子炮和负离子炮击落氖同位素来停止太阳耀斑爆发。从上图中可以看出,游戏中一支枪是粉红色的,另一支是蓝绿色的,每支枪只能射出相应的同位素。《Neon》一共有42个很具视觉冲击的关卡,其中每一个都被精心设计,它们需要
衡宇发自凹非寺 量子位|公众号QbitAI上阵父子兵!一对博士父子,不仅同为南京邮电大学校友,还拜在同一导师门下。△图源江苏新闻这对“师兄弟”,父亲叫黄晓,博士毕业于南邮教授杨庚门下,研究方向为计算机通信网与安全。儿子叫黄喻先,本科就是南邮人,以考研第一的成绩,跟随杨庚教授开启硕博连读旅程。颇为奇妙的体验,把这对父子一下拉到公众视线中。父子同门是何体验父子同门的故事首先要从父亲黄晓的求学之路说起。1993年,黄晓从东南大学本科毕业,并于8年后考入武汉大学,学习计算机软件领域方面的知识。研究生毕业后,黄晓在工作中对通信领域产生了浓厚的兴趣,他再一次求学,最终考入南京邮电大学杨庚教授门下,攻读计算机通信网与安全方向的博士。2011年,黄晓顺利从南邮毕业。读博期间,黄晓深受导师杨庚的影响。根据扬子晚报的说法,黄晓称导师既有“严谨认真的治学态度”,也有“乐观热情的生活态度”,还会结合黄晓工作中的实际问题,寻求研究方向的突破口。△黄晓(左)与杨庚(右),图源紫牛新闻儿子黄喻先在南邮读完本科、考研本校成功后,父亲推荐儿子选择同一导师,成为同门师兄弟。目前,博二在读的黄喻先已经在导师的指导帮助下,拿
目录0x01隐藏文件0x02隐藏文件时间戳0x03隐藏权限0x04隐藏历史操作命令技巧一:只针对你的工作关闭历史记录技巧二:从历史记录中删除指定的命令0x05进程隐藏第一种方法:libprocesshider0x01隐藏文件Linux下创建一个隐藏文件:touch.test.txttouch命令可以创建一个文件,文件名前面加一个点就代表是隐藏文件一般的Linux下的隐藏目录使用命令ls-l是查看不出来的,只能查看到文件及文件夹,查看Linux下的隐藏文件需要用到命令:ls-al这里,我们可以看到在/tmp下,默认存在多个隐藏目录,这些目录是恶意文件常用来藏身的地方。如/temp/.ICE-unix/、/temp/.Test-unix/、/temp/.X11-unix/、/temp/.XIM-unix/0x02隐藏文件时间戳Unix下藏后门必须要修改时间,否则很容易被发现,直接利用touch就可以了。比如参考1.php的时间,再赋给2.php,结果两个文件的时间就一样了。利用方法touch-r1.php2.php或者直接将时间戳修改成某年某月某日。如下2020年01月02日。touch-
一、异步编程概述 异步编程是一种并发编程的模式,其关注点是通过调度不同任务之间的执行和等待时间,通过减少处理器的闲置时间来达到减少整个程序的执行时间;异步编程跟同步编程模型最大的不同就是其任务的切换,当遇到一个需要等待长时间执行的任务的时候,我们可以切换到其他的任务执行; 与多线程和多进程编程模型相比,异步编程只是在同一个线程之内的的任务调度,无法充分利用多核CPU的优势,所以特别适合IO阻塞性任务; python版本3.9.5 二、python的异步框架模型 python提供了asyncio模块来支持异步编程,其中涉及到coroutines、eventloops、futures三个重要概念; eventloops主要负责跟踪和调度所有异步任务,编排具体的某个时间点执行的任务; coroutines是对具体执行任务的封装,是一个可以在执行中暂停并切换到eventloops执行流程的特殊类型的函数;其一般还需要创建task才能被eventloops调度; futures负责承载coroutines的执行结果,其随着任务在eventloops中的初始化而创建,并随着任务的执行来记录任务的执
问题描述ArcGISServer10.5安装过程中,所有授权和破解均已完成,但是最后一步创建站点的时候显示创建失败,会出现如下图所示的问题:既“无法创建站点,计算机不具有有效的的许可…”,经历了卸载ArcGISLicense又重新安装(这里提醒一下,如果出现电脑ArcGIS许可服务无法重新启动的情况,可以考虑下卸载License再重新安装并破解授权)差点都想卸载ArcGIS了,“噢,不,应该是想重新装系统!”,偶然之前看到一个方法,记录下来和大家分享一下: 解决前提1、后面一系列解决步骤的前题是机器上ArcGISServer和ArcGISLicense的安装和授权步骤操作完毕,但是ArcGISServerManager首次初始化时创建站点失败,如果前面一系列工作还没有做的话,希望大家还是老老实实的请教下“度娘”吧~~2、另外说一点,最好先检查下自己的电脑名称中是否带有横杠符号“-”,如果有请把他去掉,换一个简单的名称(怎么修改名称的就不说了吧,桌面"我点电脑"右击选择“属性”,然后再更改就可以);其次,在自己的Ser
//前缀和算法(一维) #include<bits/stdc++.h> usingnamespacestd; constintN=10010; inta[N]; ints[N]; intmain() { ios::sync_with_stdio(false); intn; cin>>n; for(inti=0;i<n;i++)cin>>a[i]; for(inti=0;i<n;i++)s[i]=s[i-1]+a[i]; //求数组的任意一段的加和; intl,r; cin>>l>>r; cout<<s[r]-s[l-1]; return0; } //前缀和算法(二维) #include<bits/stdc++.h> usingnames
无需破解:WindowsServer2008R2免费使用900天的方法 1、安装后就有一个180天的试用期。 2、在180天试用期即将结束时,使用下面的评估序列号激活Server2008R2可以重新恢复180天试用期: WindowsServer2008R2Web:KBV3Q-DJ8W7-VPB64-V88KG-82C49WindowsServer2008R2Standard:4GGC4-9947F-FWFP3-78P6F-J9HDRWindowsServer2008R2Enterprise:7PJBC-63K3J-62TTK-XF46D-W3WMDWindowsServer2008R2Datacenter:QX7TD-2CMJR-D7WWY-KVCYC-6D2YT 3、在180天试用期即将结束时,在命令行中输入slmgr.vbs/rearm的重置命令,重新输入上面的序列号后重启计算机,剩余时间又恢复到180天。微软官方文档中声明该命令只能重复使用5次。 4、上面的方法5次后,此后将无法再次使用。就要进行下一步,修改注册表中的一处键值(SkipRearm),以后就可以再次使用slmgr
>在某个catkinpackage下新建文件夹,并命名为“scripts”,并新建文件“/scripts/timed_roslaunch.sh”(名字不重要,这里只是示例)。并将如下内容复制粘贴到timed_roslaunch.sh文件中: 1functionshowHelp(){ 2echo 3echo"Thisscriptcandelaythelaunchofaroslaunchfile" 4echo"Placeitinthe'scripts'folderofyourcatkinpackage" 5echo"andmakesurethatthefileisexecutable(chmod+xtimed_roslaunch.sh)" 6echo 7echo"Runitfromcommandline:" 8echo 9echo"Use:./timed_roslaunch.sh[numberofsecondstodelay][rospkg][roslaunchfile][arguments(optional)]" 10echo"Or:rosrun[yourpackage]time
【题目6】输出100以内的所有素数,素数之间以一个空格区分 frommathimportsqrt print''.join(str(key)forkeyin[xforxinxrange(2,100)if0notin[x%dfordinxrange(2,int(sqrt(x))+1)]])复制 【题目7】已知矩形长a,宽b,输出其面积和周长,面积和周长以一个空格隔开 print('%s%s'%(a*b,2*a+2*b))复制 【题目8】给你一个listL,如L=[0,1,2,3,4],输出L的中位数(若结果为小数,则保留一位小数) L.sort() a=len(L) ifa%2!=0: M=L[int((a-1)/2)] else: M=round((L[int(a/2-1)]+L[int(a/2)])/2.0,1) print(M)复制 【题目9】给你两个正整数a和b,输出它们的最大公约数 list1=[] list2=[] #用a去除以所有比它小的整数 forxinrange(1,a+1): ifint(a%x)==0: list1.append(x) foryi
水题虽不好,但是很爽 渴望未来某天能把剩下的题补了,先做个记录。 HardDiskDrive http://acm.hdu.edu.cn/showproblem.php?pid=4788 单位转化,转一级就转了1000/1024,用pow就ok,答案要百分比就再转化一下。 1#include<bits/stdc++.h> 2usingnamespacestd; 3intmain() 4{ 5intt;scanf("%d",&t); 6for(intkk=1;kk<=t;kk++) 7{ 8intn; 9charlev[5]; 10scanf("%d%s",&n,lev); 11printf("Case#%d:",kk); 12doubleans=1000/1024.0; 13if(lev[1]=='B')ans=0; 14elseif(lev[1]=='K')ans=100-ans*100; 15elseif(lev[1]=='M')ans=100-pow(ans,2)*100; 16elseif(lev[1]=='G')ans=10
ValueError:invalidliteralforint()withbase10:''不能将非数字字符串转换为整型复制 objecthasnoattribute 对象调用一个没有的方法(内建或自定义)复制 TypeError:onlylength-1arrayscanbeconvertedtoPythonscalars 只有长度为1的数组才能被转换复制 AttributeError:'NotImplementedType'objecthasnoattribute'T' 关于NotImplementedType,这个有可能是在计算时将字符与数值运算会出现复制