题目名字:

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实现)相关推荐

  1. 简单总结几种思维模式---助你编程,思绪如飞

    矩阵思维: 什么是矩阵思维,我们可以简单理解为一个思维工具 就把它类比成汉字"田", 主要指把复杂的想法或事物放到四块矩形里.通常能够做到让看似混乱的.凭感觉的猜测,一下变得清晰 ...

  2. Java代码简洁之道

    Java如何把代码写的简洁? 其实这是一个熟练的过程,有的代码在编写的时候有很多方法你没有见过,所以你只能按照一般写法来做,这也就是经验不足!或者有的时候你没有熟练掌握面向对象的思想,所以无法从全局出 ...

  3. 前端JavaScript(1) --Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏...

    一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...

  4. python 全栈开发,Day50(Javascript简介,第一个JavaScript代码,数据类型,运算符,数据类型转换,流程控制,百度换肤,显示隐藏)...

    一.Javascript简介 Web前端有三层: HTML:从语义的角度,描述页面结构 CSS:从审美的角度,描述样式(美化页面) JavaScript:从交互的角度,描述行为(提升用户体验) Jav ...

  5. (hdu 简单题 128道)平方和与立方和(求一个区间的立方和和平方和)

    题目: 平方和与立方和 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Tota ...

  6. 一个简单的录音软件程序代码【C++】

    一个简单的录音软件程序代码[C++]今天的院内绿草茵茵的 录音软件,岁月一去不回返,顽强拼搏,我将来的录音软件家是一栋三层的别墅,因为小树给我留下的是顽强拼搏,你见状,可你的眼睛好像在说,那盛夏的梧桐 ...

  7. python 单词长度_用python手刃leetcode(58):最后一个单词的长度【简单题】

    前言 博客里新开一个"用python手刃Leetcode"的专题,顾名思义,主要目的是记录自己在Leetcode上刷题的过程,代码全程用python3编写,所用网址是:leetco ...

  8. 用opengl编写一个简单的画图软件示例代码

    //用opengl编写一个简单的画图软件示例代码(存在闪烁问题) //本代码,抄写自一本教授opengl的书,可惜,里面的代码存在一些问题,导致不能正常显示,现在是增加了一些语句的代码 #includ ...

  9. Linux内核分析2:一个简单的时间片轮转多道程序内核代码分析

    Lab2:一个简单的时间片轮转多道程序内核代码 席金玉   <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-100002900 ...

最新文章

  1. NoSQL数据库四大分类
  2. 顺序表-元素逆置(首尾交换)
  3. linux下的包和RPM管理
  4. 改善java程序的建议
  5. 如何解决90%的NLP问题:逐步指导
  6. [填坑手册]小程序目录结构和组件化使用心得
  7. linux 字符串 空,linux – bash空字符串/命令
  8. 关于软件测试里面的Fault Error Failure 差别
  9. js将docx转换为html,js实现word转换为html
  10. python vtk_Python vtk.vtkRenderer方法代码示例
  11. Excel表格中选择性粘贴如何粘贴为数值
  12. 什么是序列化与反序列化,为什么序列化
  13. 社保管理系统连接不上服务器,社保费客户端登录服务器异常
  14. html收藏的链接,浏览器收藏夹中收藏的网页链接怎么导出来?
  15. 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询
  16. kali 虚拟机下 mana-toolkit 的安装
  17. 大兴公寓的那场火,烧毁了我的所有
  18. 浅谈搜索引擎和传统数据库(ES,solr)
  19. 【正点原子MP157连载】第二十五章 pinctrl和gpio子系统实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  20. QT5 学习之路15---布局管理器

热门文章

  1. android 广播观察者,BroadcastReceiver和Activity之间的通信 – android
  2. 项目中常见错误总结一
  3. cacti监控一览无余
  4. Android学习笔记---后台运行方法
  5. Linux headtail命令
  6. 第十三章、facl及用户及Linux终端
  7. EasyUI 1.3.6 行号显示不全
  8. 小伙伴们惊呆了!10行 JavaScript 实现文本编辑器
  9. 学习Struts 2.0系列文章
  10. apache 不解释php,apache-2.2 – Apache不解释.PHP文件