python 类 练习

 1 #encoding=utf-8
 2 from __future__ import division
 3 import time
 4 # 13-5. 几何. 创建一个由有序数值对(x, y) 组成的 Point 类,它代表某个点的 X 坐标和 Y 坐
 5 # 标。X 坐标和 Y 坐标在实例化时被传递给构造器,如果没有给出它们的值,则默认为坐标的原点。
 6 class Point(object):
 7     def __init__(self,x = 0,y = 0):
 8         self.PointX = x
 9         self.PointY = y
10         print '(%d,%d)'%(self.PointX,self.PointY)
11 p1 = Point()
12 p2 = Point(2,3)
13 
14 
15 # 13-6. 几何. 创建一个直线/直线段类。 除主要的数据属性: 一对坐标值(参见上一个练习)外,
16 # 它还具有长度和斜线属性。你需要覆盖__repr__()方法(如果需要的话,还有__str__()方法),使得
17 # 代表那条直线(或直线段)的字符串表示形式是由一对元组构成的元组,即,((x1, y1), (x2, y2)).
18 # 总结:
19 # __repr__ 将直线的两个端点(始点和止点)显示成一对元组
20 # length 返回直线段的长度 - 不要使用"len", 因为这样使人误解它是整数。
21 # slope 返回此直线段的斜率(或在适当的时候返回 None)
22 
23 
24 #额外
25 # Python求平方根至少有三种方式
26 # 1.最简单的方式是求0.5次方
27 # 1
28 # 4 ** 0.5
29 # 2.使用math包的sqrt函数
30 # 1
31 # math.sqrt(4)
32 # 3.使用numpy包的sqrt函数
33 # 1
34 # numpy.sqrt(4)
35 # 
36 
37 #round(a,2)可以把a保留二位小数
38 class line(object):
39     def __init__(self,p1 = Point(2,3),p2 = Point(1,2)):
40         self.point1 = p1
41         self.point2 = p2
42     def __repr__(self):
43         print 'line is'
44         print '((%d,%d),(%d,%d))'%(self.point1.PointX,self.point1.PointY, \
45             self.point2.PointX,self.point2.PointY)
46     def length(self):
47         x = self.point1.PointX - self.point2.PointX
48         y = self.point1.PointY - self.point2.PointY
49         tem1 = x*x + y*y
50         tem2 = tem1 ** 0.5
51         print 'line length is :%.2f ' % round(tem2,2)
52     def slope(self):
53         x = self.point1.PointX - self.point2.PointX
54         y = self.point1.PointY - self.point2.PointY
55         print 'line slope is %.2f' % (x/y)
56 l1 = line()
57 l1.__repr__()
58 l1.length()
59 l1.slope()
60 
61 l2 = line(Point(1,5),Point(3,4))
62 l2.slope()
63 
64 # 13-7. 数据类。提供一个 time 模块的接口,允许用户按照自己给定时间的格式,比如:
65 # “MM/DD/YY,” “MM/DD/YYYY,” “DD/MM/YY,” “DD/MM/ YYYY,” “Mon DD, YYYY,” 或是标准
66 # 的 Unix 日期格式:“Day Mon DD, HH:MM:SS YYYY” 来查看日期。你的类应该维护一个日期值,并
67 # 用给定的时间创建一个实例。如果没有给出时间值,程序执行时会默认采用当前的系统时间。还包
68 # 括另外一些方法:
69 # update() 按给定时间或是默认的当前系统时间修改数据值
70 # display() 以代表时间格式的字符串做参数,并按照给定时间的格式显示:
71 # 'MDY' ==> MM/DD/YY
72 # 'MDYY' ==> MM/DD/YYYY
73 # 'DMY' ==> DD/MM/YY
74 # 'DMYY' ==> DD/MM/YYYY
75 # 'MODYY' ==> Mon DD, YYYY
76 # 如果没有提供任何时间格式,默认使用系统时间或 ctime()的格式。 附加题: 把这个类和练习
77 # 6-15 结合起来
78 print time.ctime()
79 
80 class myTime(object):
81     def update(self):
82         pass
83     def display(self,t):
84         if t == 'MDY':
85             print time.strftime("%m/%Y/%d",time.localtime())
86         if t == 'DMYY':
87             print time.strftime("%H/%M/%S",time.localtime())
88 
89 time1 = myTime()
90 time1.display('MDY')
91 time1.display('DMYY')