[简单题]换一个思维,代码简洁度就完全变了(Python实现)
题目名字:
Human readable duration format
原题链接:
https://www.codewars.com/kata/human-readable-duration-format/train/python
就是将一个秒钟化为人能看懂的时间,要注意细节,应该就是可以做出来的。
以前打C++的时候做了蛮多的,不过这题好像不支持C++。
但是我还是按照类似的思路做了一遍复杂度大概也就是一个O(n)
但是代码中有不少的重复段。所以有些长。
def format_duration(seconds):if seconds == 0:return 'now'a = [0] * 5b = ['second', 'minute', 'hour', 'day', 'year']ans = ''time = 0for i, s in enumerate(a):if i < 2:a[i] = seconds % 60seconds //= 60if a[i] == 0:continueelif a[i] == 1:if time == 0:ans = '1 '+ b[i] + anselif time == 1:ans = '1 '+ b[i] +' and '+ anselse:ans = '1 '+ b[i] +', '+ anstime += 1else:if time == 0:ans = str(a[i]) + ' ' + b[i] + 's' + anselif time == 1:ans = str(a[i]) + ' ' + b[i] + 's' + ' and ' + anselse:ans = str(a[i]) + ' ' + b[i] + 's' + ', ' + anstime += 1elif i == 2:a[i] = seconds % 24seconds //= 24if a[i] == 0:continueelif a[i] == 1:if time == 0:ans = '1 '+ b[i] + anselif time == 1:ans = '1 '+ b[i] +' and '+ anselse:ans = '1 '+ b[i] +', '+ anstime += 1else:if time == 0:ans = str(a[i]) + ' ' + b[i] + 's' + anselif time == 1:ans = str(a[i]) + ' ' + b[i] + 's' + ' and ' + anselse:ans = str(a[i]) + ' ' + b[i] + 's' + ', ' + anstime += 1elif i == 3:a[i] = seconds % 365seconds //= 365if a[i] == 0:continueelif a[i] == 1:if time == 0:ans = '1 '+ b[i] + anselif time == 1:ans = '1 '+ b[i] +' and '+ anselse:ans = '1 '+ b[i] +', '+ anstime += 1else:if time == 0:ans = str(a[i]) + ' ' + b[i] + 's' + anselif time == 1:ans = str(a[i]) + ' ' + b[i] + 's' + ' and ' + anselse:ans = str(a[i]) + ' ' + b[i] + 's' + ', ' + anstime += 1else:a[i] = secondsif a[i] == 0:continueelif a[i] == 1:if time == 0:ans = '1 '+ b[i] + anselif time == 1:ans = '1 '+ b[i] +' and '+ anselse:ans = '1 '+ b[i] +', '+ anstime += 1else:if time == 0:ans = str(a[i]) + ' ' + b[i] + 's' + anselif time == 1:ans = str(a[i]) + ' ' + b[i] + 's' + ' and ' + anselse:ans = str(a[i]) + ' ' + b[i] + 's' + ', ' + anstime += 1return ans
主要是那个判断加's' 、','、' '、'and'
打了没多就可以搞定很多都是重复字段。
!但是,要注意一个细节,在Python中,默认是可以做数的标准除法的,不像是之前的C++或者C。
/表示的取整
//(in Python) == / (in C/C++)
应该看懂上面这段话是没有问题的了。
按照套路,我们会分析一下,那些大佬的代码
times = [("year", 365 * 24 * 60 * 60),("day", 24 * 60 * 60),("hour", 60 * 60),("minute", 60),("second", 1)]def format_duration(seconds):if not seconds:return "now"chunks = []for name, secs in times:qty = seconds // secsif qty:if qty > 1:name += "s"chunks.append(str(qty) + " " + name)seconds = seconds % secsreturn ', '.join(chunks[:-1]) + ' and ' + chunks[-1] if len(chunks) > 1 else chunks[0]
在我那时,这个解法应该是最多认可的。
从循环的过程来看,这个是倒着来的。(所以,他都是直接取余数,而我之前那个版本是做整除)
在这个代码中,先是显示了一个由元组所组成的列表。可以看出,这家伙对于enumerate的理解应该是比较高的呢。
关于函数内部实现,第一段的那句返回,很显然
第二部分设置了一个空的列表,用于储存分段的数据
在一开始的时候所设置的列表,在这里起到了作用,可以直接提取出对应的分刻数据,用于计算。也正是这个原因,他的代码简洁度才得到了提高。
之后,由于name 是临时变量,所以,可以直接做+='s'处理,同样很方便。
之后就是正常的入库处理了。
在最后的返回的时候,做了一个判断处理。可以看出,只有当总数大于等于二的时候,才需要做+and处理,而大于2的部分,做加','处理,否则就直接返回第一个
[简单题]换一个思维,代码简洁度就完全变了(Python实现)相关推荐
- 简单总结几种思维模式---助你编程,思绪如飞
矩阵思维: 什么是矩阵思维,我们可以简单理解为一个思维工具 就把它类比成汉字"田", 主要指把复杂的想法或事物放到四块矩形里.通常能够做到让看似混乱的.凭感觉的猜测,一下变得清晰 ...
- Java代码简洁之道
Java如何把代码写的简洁? 其实这是一个熟练的过程,有的代码在编写的时候有很多方法你没有见过,所以你只能按照一般写法来做,这也就是经验不足!或者有的时候你没有熟练掌握面向对象的思想,所以无法从全局出 ...
- 前端JavaScript(1) --Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏...
一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...
- python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)...
一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...
- (hdu 简单题 128道)平方和与立方和(求一个区间的立方和和平方和)
题目: 平方和与立方和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Tota ...
- 一个简单的录音软件程序代码【C++】
一个简单的录音软件程序代码[C++]今天的院内绿草茵茵的 录音软件,岁月一去不回返,顽强拼搏,我将来的录音软件家是一栋三层的别墅,因为小树给我留下的是顽强拼搏,你见状,可你的眼睛好像在说,那盛夏的梧桐 ...
- python 单词长度_用python手刃leetcode(58):最后一个单词的长度【简单题】
前言 博客里新开一个"用python手刃Leetcode"的专题,顾名思义,主要目的是记录自己在Leetcode上刷题的过程,代码全程用python3编写,所用网址是:leetco ...
- 用opengl编写一个简单的画图软件示例代码
//用opengl编写一个简单的画图软件示例代码(存在闪烁问题) //本代码,抄写自一本教授opengl的书,可惜,里面的代码存在一些问题,导致不能正常显示,现在是增加了一些语句的代码 #includ ...
- Linux内核分析2:一个简单的时间片轮转多道程序内核代码分析
Lab2:一个简单的时间片轮转多道程序内核代码 席金玉 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...
最新文章
- NoSQL数据库四大分类
- 顺序表-元素逆置(首尾交换)
- linux下的包和RPM管理
- 改善java程序的建议
- 如何解决90%的NLP问题:逐步指导
- [填坑手册]小程序目录结构和组件化使用心得
- linux 字符串 空,linux – bash空字符串/命令
- 关于软件测试里面的Fault Error Failure 差别
- js将docx转换为html,js实现word转换为html
- python vtk_Python vtk.vtkRenderer方法代码示例
- Excel表格中选择性粘贴如何粘贴为数值
- 什么是序列化与反序列化,为什么序列化
- 社保管理系统连接不上服务器,社保费客户端登录服务器异常
- html收藏的链接,浏览器收藏夹中收藏的网页链接怎么导出来?
- 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询
- kali 虚拟机下 mana-toolkit 的安装
- 大兴公寓的那场火,烧毁了我的所有
- 浅谈搜索引擎和传统数据库(ES,solr)
- 【正点原子MP157连载】第二十五章 pinctrl和gpio子系统实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
- QT5 学习之路15---布局管理器