题目:
定义一个表示时间的类Time
a)Time(hours,minutes,seconds)创建一个时间对象;
b)t.hours(),t.minutes(),t.seconds()分别返回时间对象t的小时,分钟和秒值
c)为Time对象定义加法和减法操作(用运算符+和-)
d)定义时间对象的等于和小于关系对象(用运算符==和<)
 #!/usr/bin/env python
# -*- coding:utf-8 -*- """
定义一个表示时间的类Time
a)Time(hours,minutes,seconds)创建一个时间对象;
b)t.hours(),t.minutes(),t.seconds()分别返回时间对象t的小时,分钟和秒值
c)为Time对象定义加法和减法操作(用运算符+和-)
d)定义时间对象的等于和小于关系对象(用运算符==和<) ADT Time: #定义时间的抽象数据类型
Time(self, int hours, int minutes, int seconds) #构造时间对象
+(self, Time t2) #求出本对象加t2的结果
-(self, Time t2) #求出本对象减t2的结果
==(self, Time t2) #本对象是否和t2相等
<(self, Time t2) #本对象小于t2
hours(self) #取出本对象的小时
minutes(self) #取出本对象的分钟
seconds(self) #取出本对象的秒值
"""
"""
Author: Minion Xu
Time:2016-11-21
""" class Time(object):
__slots__ = ('_hours','_minutes','_seconds') #创建时间对象
def __init__(self, hours=0, minutes=0, seconds=0):
#类型判断
if not isinstance(hours, int) or not isinstance(minutes, int) or not isinstance(seconds, int):
raise TypeError if(0<=hours<=23):
self._hours = hours
if (0 <= minutes <= 59):
self._minutes = minutes
if (0 <= seconds <= 59):
self._seconds = seconds
else:
raise ValueError("%d is not valid seconds!" % seconds)
else:
raise ValueError("%d is not valid minutes!" % minutes) else:
raise ValueError("%d is not valid hours!" % hours) # +
def __add__(self, other):
seconds_add = self._seconds + other._seconds
seconds_carry = seconds_add // 60 #超过60秒进位
seconds = seconds_add % 60 #秒值
minutes_add = self._minutes + other._minutes + seconds_carry
minutes_carry = minutes_add // 60 #超过60分进位
minutes = minutes_add % 60 #分钟
hours_add = self._hours + other._hours + minutes_carry
if(hours_add<24):
hours = hours_add
else:
hours = hours_add - 24 #小时
return Time(hours, minutes, seconds)
# -
def __sub__(self, other):
if self._seconds < other._seconds:
self._minutes -= 1
seconds = self._seconds + 60 - other._seconds
else:
seconds = self._seconds - other._seconds
if self._minutes < other._minutes:
self._hours -= 1
minutes = self._minutes + 60 - other._minutes
else:
minutes = self._minutes - other._minutes
if self._hours < other._hours:
hours = self._hours + 24 - other._hours
else:
hours = self._hours - other._hours
return Time(hours, minutes, seconds)
# ==
def __eq__(self, other):
bool1 = False
bool2 = False
bool3 = False
if self._hours == other._hours:
bool1 = True
if self._minutes == other._minutes:
bool2 = True
if self._seconds == other._seconds:
bool3 = True
return bool1 and bool2 and bool3 # <
def __lt__(self, other):
if self._hours < other._hours:
return True
elif self._hours == other._hours:
if self._minutes < other._minutes:
return True
elif self._minutes == other._minutes:
if self._seconds < other._seconds:
return True
else:
return False
else:
return False
else:
return False def hours(self):
return self._hours def minutes(self):
return self._minutes def seconds(self):
return self._seconds def print(self):
print(self._hours,":",self._minutes,":",self._seconds) def __str__(self):
return str(self._hours) + ":" + str(self._minutes) + ":" +str(self._seconds) if __name__ == '__main__':
t = Time(21,31,59)
t1 = Time(18,31,41)
he = t + t1
cha = t - t1
print(he)
print(cha)
print(t==t1)
print(t<t1)
print(he.hours())



 

《数据结构与算法Python语言描述》习题第二章第一题(python版)的更多相关文章

  1. 【数据结构与算法分析——C语言描述】第二章总结 算法分析

    算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ ...

  2. 数据结构与算法分析——C语言描述 第三章的单链表

    数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...

  3. 检索算法 -- 数据结构与算法的javascript描述 第13章

    检索算法-如何在列表中查找特定的值. 顺序查找 从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,它属于暴力查找技巧的一种,在执行查找时可能会访问到数据结构里的所有元素. 代码: / ...

  4. 排序算法 -- 数据结构与算法的javascript描述 第12章

    排序是常见的功能,给定一组数据,对其进行排序. 在此之前,我们需要准备个基础工作--自动生成数组,并可以对该组数据做任何处理. /** * 测试类 ,数组 * @param numElements * ...

  5. python核心编程-习题-第二章

    PS:PDF在线地址:http://bcmi.sjtu.edu.cn/~zhaohai/ptm2012/data/Python-kernel.programming.v2.pdf 2-1  变量,pr ...

  6. 字典 -- 数据结构与算法的javascript描述 第七章

    字典 字典是一种以键-值对形式存储数据的数据结构 最基本功能规划 add 添加数据到字典 remove 从字典中移除数据 get 从字典中取出数据 count 统计字典数据量 find 查找数据在字典 ...

  7. 链表的实现 -- 数据结构与算法的javascript描述 第六章

    链表 链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链 结构示意图 : 链表头需要我们标识 head { element:head,next:obj1 ...

  8. 队列的实现 -- 数据结构与算法的javascript描述 第五章

    队列也是列表的一种,有不同于列表的规则. 先进先出 入队方法 出队方法 可以找到队首 可以找到队尾 可以查看队列有多长 可以查看队列是否为空 这是一个基本的需求,围绕他来实现,当然我们可以自己扩展列表 ...

  9. 栈的实现 -- 数据结构与算法的javascript描述 第四章

    栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 ...

随机推荐

  1. MySQL5.7 新增配置

    1.log_timestamps 在5.7.2以后的版本中增加一个单独控制error log , general log,slow log的记录的时间,默认是UTC,需要配置成SYSTEM(本地时间) ...

  2. nginx小记

    上一次折腾nginx还是两年前的事情了.好多配置都忘记了. 捣腾了下阿里云,部署了一下,遇到几个小问题,温故并记录一下吧 :) 重新设置 nginx遇到问题:nginx: [error] invali ...

  3. gulp使用小结(一)

    这篇文章不会介绍 gulp 的起源.发展:不会去一个个讲解 gulp API:也不想出现大段大段的 gulpfile.js 代码:更木有帮你分析 gulp 实现原理,只有一些我自己对 gulp 的使用 ...

  4. TODO:浅谈pm2基本工作原理

    TODO:浅谈pm2基本工作原理 要谈Node.js pm2的工作原理,需要先来了解撒旦(Satan)和上帝(God)的关系. 撒旦(Satan),主要指<圣经>中的堕天使(也称堕天使撒旦 ...

  5. 这台计算机上缺少此项目引用的 NuGet 程序包-缺少的文件是 ..\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0\build\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.props

    异常处理汇总-开发工具  http://www.cnblogs.com/dunitian/p/4522988.html 协助开发里面总有几个是极简爱好者,但是呢删了不该删的就会影响项目开发,下面看下完 ...

  6. OpenWebGlobe-开源三维GIS初体验(附源码和演示)

    1.OpenWebGlobe简介 OpenWebGlobe是一个高性能的三维引擎.可应用于可视化仿真,游戏,三维GIS,虚拟现实等领域.它使用纯javascript编写,可以运行在任何支持HTML5. ...

  7. 前端MVC框架Backbone 1.1.0源码分析(一)

    前言 如何定义库与框架 前端的辅助工具太多太多了,那么我们是如何定义库与框架? jQuery是目前用的最广的库了,但是整体来讲jQuery目的性很也明确针对“DOM操作”,当然自己写一个原生态方法也能 ...

  8. Python标准模块--collections

    1.模块简介 collections包含了一些特殊的容器,针对Python内置的容器,例如list.dict.set和tuple,提供了另一种选择: namedtuple,可以创建包含名称的tuple ...

  9. 关于javascript中限定时间内防止按钮重复点击的思路

    前面的话 有一天心血来潮,1分钟内重复点击了多次博客园首页的刷新博文列表的刷新按钮.果不其然,ip当时就被禁用了.后来,重启自己的路由器,重新获取ip才可以访问博客园主页.那么,设置一个限定时间内(比 ...

  10. IOS学习之初识KVC

    什么是kvc? kvc (key-value coding )键值编码,是ios 提供的一种通过key间接的来访问对象属性的一直方式. 哪些类支持kvc操作? kvc的操作方法由NSKeyValueC ...