题目:
定义一个表示时间的类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. Step by step 活动目录中添加一个子域

    原创地址:http://www.cnblogs.com/jfzhu/p/4006545.html 转载请注明出处 前面介绍过如何创建一个域,下面再介绍一下如何在该父域中添加一个子域. 活动目录中的森林 ...

  2. 有一个团队协同工具,叫Worktile

    项目管理,本是一个老生常谈的话题,曾几何时大碗云集在这个市场,其中不乏出现像微软.SAP.IBM.用友这样的名字.复杂而又冗繁的流程控制,让人们划分成两类人,一类是会使用这些工具和系统的人,另一类是不 ...

  3. C# 服务程序 - 调试服务

    前言:本篇文章环境是VS2015,win10.如果有任何的差别,请注意 1. 创建服务程序 1)用VC创建服务程序,叫做 MyTestWindowsService 创建完成之后,可以看到 2)添加安装 ...

  4. Objective-C 装饰模式--简单介绍和使用

    装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 比如游戏机有一个GamePad类, 现在要增加一个作弊功能(例如100 ...

  5. FPGrowth算法总结复习

    摘要: 1.算法概述 2.算法推导 3.算法特性及优缺点 4.注意事项 5.实现和具体例子 6.适用场合 内容: 1.算法概述 关联规则(associatio rules):从大规模数据集中寻找物品建 ...

  6. jQuery插件:jqGrid引入及基本属性

    1. jqGrid下载 jqGrid下载地址: http://www.trirand.com/blog/ jqGrid Demo: http://www.guriddo.net/demo/guridd ...

  7. VB.NET 创建文件以及文件的读写(创建随机数)

    创建文件 Dim strFile As String = String.Format("C:\ErrorLog.txt", DateTime.Today.ToString(&quo ...

  8. c++ stringstream(老好用了)

    前言: 以前没有接触过stringstream这个类的时候,常用的字符串和数字转换函数就是sscanf和sprintf函数.开始的时候就觉得这两个函数应经很叼了,但是毕竟是属于c的.c++中引入了流的 ...

  9. VS2015 Enterprise 安装之惊险及收获

    前言 园子早早的就有人安装了VS 2015,自己也按捺不住了,也要赶快尝尝鲜!结果在其安装过程中一个小小的问题却困扰了我一天,这其中多亏了dudu耐心的解答才得以顺利完成,如果你也遇见这个问题,看过这 ...

  10. 在ASP.NET Web API项目中使用Hangfire实现后台任务处理

    当前项目中有这样一个需求:由前端用户的一个操作,需要触发到不同设备的消息推送.由于推送这个具体功能,我们采用了第三方的服务.而这个服务调用有时候可能会有延时,为此,我们希望将消息推送与用户前端操作实现 ...