forked from AllenDowney/ThinkPython2
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPoint1.py
More file actions
121 lines (90 loc) · 2.46 KB
/
Point1.py
File metadata and controls
121 lines (90 loc) · 2.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
"""This module contains a code example related to
Think Python, 2nd Edition
by Allen Downey
http://thinkpython2.com
Copyright 2015 Allen Downey
License: http://creativecommons.org/licenses/by/4.0/
"""
from __future__ import print_function, division
class Point:
"""Represents a point in 2-D space.
attributes: x, y
"""
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __str__(self):
return('(%g, %g)' % (self.x, self.y))
def __add__(self, other):
if isinstance(other, Point):
return self.add_point(other)
else:
return self.add_tuple(other)
def __radd__(self, other): # Make point addition commutative
return self.__add__(other)
def add_point(self, other):
sumpoint = Point()
x3 = self.x + other.x
y3 = self.y + other.y
sumpoint.x = x3
sumpoint.y = y3
return sumpoint
def add_tuple(self, twople):
sumpoint = Point()
x3 = self.x + twople[0]
y3 = self.y + twople[1]
sumpoint.x = x3
sumpoint.y = y3
return sumpoint
def print_point(p):
"""Print a Point object in human-readable format."""
print('(%g, %g)' % (p.x, p.y))
class Rectangle:
"""Represents a rectangle.
attributes: width, height, corner.
"""
def find_center(rect):
"""Returns a Point at the center of a Rectangle.
rect: Rectangle
returns: new Point
"""
p = Point()
p.x = rect.corner.x + rect.width/2.0
p.y = rect.corner.y + rect.height/2.0
return p
def grow_rectangle(rect, dwidth, dheight):
"""Modifies the Rectangle by adding to its width and height.
rect: Rectangle object.
dwidth: change in width (can be negative).
dheight: change in height (can be negative).
"""
rect.width += dwidth
rect.height += dheight
def main():
blank = Point()
blank.x = 3
blank.y = 4
print('blank', end=' ')
print(blank)
box = Rectangle()
box.width = 100.0
box.height = 200.0
box.corner = Point()
box.corner.x = 0.0
box.corner.y = 0.0
center = find_center(box)
print('center', end=' ')
print(center)
print(box.width)
print(box.height)
print('grow')
grow_rectangle(box, 50, 100)
print(box.width)
print(box.height)
three = Point(2, 3)
four = Point(4,5)
print(three+four)
print(three + (1,1))
print((1,1) + four)
if __name__ == '__main__':
main()