《数据结构与算法Python语言描述》习题第二章第一题(python版)
题目:
定义一个表示时间的类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版)的更多相关文章
- 【数据结构与算法分析——C语言描述】第二章总结 算法分析
算法 算法(algorithm)是为求解一个问题需要遵循的.被清楚地指定的简单指令的集合. 数学基础 四个定义: 1.大O表示法: 如果存在正常数 c 和 n0 使得当 N ≥ n0时,T(N) ≤ ...
- 数据结构与算法分析——C语言描述 第三章的单链表
数据结构与算法分析--C语言描述 第三章的单链表 很基础的东西.走一遍流程.有人说学编程最简单最笨的方法就是把书上的代码敲一遍.这个我是头文件是照抄的..c源文件自己实现. list.h typede ...
- 检索算法 -- 数据结构与算法的javascript描述 第13章
检索算法-如何在列表中查找特定的值. 顺序查找 从列表的第一个元素开始对列表元素逐个进行判断,直到找到了想要的结果,它属于暴力查找技巧的一种,在执行查找时可能会访问到数据结构里的所有元素. 代码: / ...
- 排序算法 -- 数据结构与算法的javascript描述 第12章
排序是常见的功能,给定一组数据,对其进行排序. 在此之前,我们需要准备个基础工作--自动生成数组,并可以对该组数据做任何处理. /** * 测试类 ,数组 * @param numElements * ...
- python核心编程-习题-第二章
PS:PDF在线地址:http://bcmi.sjtu.edu.cn/~zhaohai/ptm2012/data/Python-kernel.programming.v2.pdf 2-1 变量,pr ...
- 字典 -- 数据结构与算法的javascript描述 第七章
字典 字典是一种以键-值对形式存储数据的数据结构 最基本功能规划 add 添加数据到字典 remove 从字典中移除数据 get 从字典中取出数据 count 统计字典数据量 find 查找数据在字典 ...
- 链表的实现 -- 数据结构与算法的javascript描述 第六章
链表 链表是由一组节点组成的集合.每个节点都使用一个对象的引用指向它的后继.指向另一个节点的引用叫做链 结构示意图 : 链表头需要我们标识 head { element:head,next:obj1 ...
- 队列的实现 -- 数据结构与算法的javascript描述 第五章
队列也是列表的一种,有不同于列表的规则. 先进先出 入队方法 出队方法 可以找到队首 可以找到队尾 可以查看队列有多长 可以查看队列是否为空 这是一个基本的需求,围绕他来实现,当然我们可以自己扩展列表 ...
- 栈的实现 -- 数据结构与算法的javascript描述 第四章
栈 :last-in-first-out 栈有自己特殊的规则,只能 后进入的元素 ,最先被推出来,我们只需要模拟这个规则,实现这个规则就好. peek是返回栈顶元素(最后一个进入的). /** * 栈 ...
随机推荐
- TODO:小程序的用户身份
TODO:小程序的用户身份 小程序的用户身份有三种,一个管理员,二十个开发者,四十个体验者 1.管理员,可设置风险操作保护.风险操作提醒等操作. a)修改管理员,需要用到原管理员,新管理员的身份证号码 ...
- java.lang.IndexOutOfBoundsException at java.io.FileOutputStream.writeBytes(Native Method)
ss available : /usr/linkapp/data/linkapp/ddn_1440639847758_temp java.lang.IndexOutOfBoundsException ...
- Spark DAGSheduler生成Stage过程分析实验
RDD.Action触发SparkContext.run,这里举最简单的例子rdd.count() /** * Return the number of elements in the RDD. */ ...
- 一个上好的C# http/https类
直接Copy拿去用吧: 新的 tls 协议需要新的.net版本, tls 至少更新到.net4吧,尽量用最新的.net! 不然出错了就折腾... using System; using System. ...
- C#实现二维码功能,winform 以及 asp.net均可以用
二维码现在用途很多,怎么用C#编程生成呢? 准备 ThoughtWorks.QRCode.dll 需要 一个类 QRCode,这个类专门来生成二维码的 using System; using Syst ...
- Myeclipse 安装SVN步骤
非在线安装 首先来这儿下载插件 http://subclipse.tigris.org/servlets/ProjectDocumentList?folderID=2240 找个最新的下载 解压到对应 ...
- 排名前 8 的 PHP 调试工具
Web 开发并不是一项轻松的任务,有超级多服务端脚本语言提供给开发者,但是当前 PHP 因为具有额外的一些强大的功能而越来越流行.PHP 是最强大的服务端脚本语言之一,同时也是 web 开发者和设计者 ...
- MyCAT ER分片的验证
在这里,构造了两张表,熟悉Oracle的童鞋都知道,dept(部门表)和emp(员工表),其中dept中的deptno是emp表中dept_no的外键. 两表的建表语句如下: create table ...
- MySQL分区总结
MySQL支持RANGE,LIST,HASH和KEY四种分区.其中,每个分区又都有一种特殊的类型.对于RANGE分区,有RANGE COLUMNS分区.对于LIST分区,有LIST COLUMNS分区 ...
- RESTful API URI 设计: 判断资源是否存在?
相关的一篇文章:RESTful API URI 设计的一些总结. 问题场景:判断一个资源(Resources)是否存在,URI 该如何设计? 应用示例:判断 id 为 1 用户下,名称为 window ...