题目:
定义一个表示时间的类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. Linux ls

    linux.ls linux ls命令, 我觉得是所有接触linux系统, 首先学习的命令. 这个命令, 我也早就接触过了. 只是以前是学习类型的. 学了以后, 没有做到学以致用.可惜了. 现在这篇内 ...

  2. TDR分辨率

    在日常的生活工作中,有很多测试测量的工具,比如测量长度的尺子,计量时间的钟表等等,谈到测试测量工具的时候,分辨率是关键指标之一,比如尺子的 分辨率是1mm,时钟的分辨率是秒.所谓分辨率就是测试测量工具 ...

  3. 前段播放 流媒体(RTMP,RTSP,HLS)

    前言 最近项目需要流媒体的播放,后端一共提供了 三种流数据(RTSP,RTMP,HLS),在不同的场景可能会使用到不同方式播放,就需要做到适配, 支持所有的流数据播放.花了一段时间研究,在这里和大家分 ...

  4. 预处理(防止sql注入的一种方式)

    <!--- 预处理(预编译) ---><?php/* 防止 sql 注入的两种方式: 1. 人为提高代码的逻辑性,使其变得更严谨,滴水不漏. 比如说 增加判断条件,增加输入过滤等,但 ...

  5. 复习sql第三次

    1.层次型数据库以"树"结构表示数据库中数据间的关系:网状型以"图"结构表示数据库中数据间的关系:关系型数据库以"二维表"结构表示数据库中数 ...

  6. Distributed1:Linked Server 添加和删除

    A linked server allows for access to distributed, heterogeneous queries against OLE DB data sources. ...

  7. VMware 中如何打开U盘弹出U盘或者移动硬盘的(两种方法)

    1.U盘如下,插入后都是直接在win里面显示的 2.选择连接u盘 3.u盘就可以在虚拟机里面显示了 4.弹出则选择断开连接 扩展:如果无效:请参考这种方法 (给虚拟机分配一个临时硬盘,然后设置这个临时 ...

  8. 进程管理三大扩展工具htop

    三大进程管理监控工具 HTOP 介绍: Htop是一款运行于Linux系统监控与进程管理软件,htop提供所有进程的列表,并且使用彩色标识出处理器.swap和内存状态.用户一般可以在top无法提供详尽 ...

  9. 配置 linux-bridge mechanism driver - 每天5分钟玩转 OpenStack(77)

    本节开始我们将学习 Linux Bridge 如何实现 Neutron 的各种功能.首先需要配置 linux-bridge mechanism driver. Neutorn ML2 plugin 默 ...

  10. CSS样式之优先级

    说到到css的样式优先级,今天偶再来回顾下,从css的样式优先级可分为两个部分: 1.从CSS代码放置的位置看权重优先级:     内联样式 > 内部嵌入样式 >外联样式 2.从样式选择器 ...