# [Tutor] line class

Christopher Spears cspears2002 at yahoo.com
Tue Jul 8 06:52:28 CEST 2008

```For problem 13-6 out of Core Python Programming, I created a line class that consists of two points.  The line class has the following methods: __repr__, length, and slope.  Here is the code:

#!/usr/bin/python

import sys,math

class Point(object):
def __init__(self, x=0.0,y=0.0):
self.x = float(x)
self.y = float(y)

def __repr__(self):
coord = (self.x,self.y)
return coord

def __str__(self):
point_str = "(%f,%f)" % (self.x, self.y)
return point_str

class Line(object):
def __init__(self, p1, p2):
self.p1 = Point(x1,y1)
self.p2 = Point(x2,y2)

def __str__(self):
x1,y1 = self.p1.x,self.p1.y
x2,y2 = self.p2.x,self.p2.y
line = "((%f,%f),(%f,%f))" % (x1,y1,x2,y2)
return line

__repr__ = __str__

def length(self):
dist_x = abs(self.p2.x - self.p1.x)
dist_y = abs(self.p2.y - self.p1.y)
dist_x_squared = dist_x ** 2
dist_y_squared = dist_y ** 2
line_length = math.sqrt(dist_x_squared + dist_y_squared)
return line_length

def slope(self):
dist_y = self.p2.y - self.p1.y
dist_x = self.p2.x - self.p1.x
line_slope = dist_y/dist_x
return line_slope

if __name__ == '__main__':
print "Creating a Line"

x1 = raw_input("Enter a x1 value: ")
y1 = raw_input("Enter a y1 value: ")
p1 = Point(x1,y1)
#print p1

x2 = raw_input("Enter a x2 value: ")
y2 = raw_input("Enter a y2 value: ")
p2 = Point(x2,y2)
#print p2

line = Line(p1,p2)

print "What are the lines attributes?"
print "Select one:"
print "1) Display line"
print "2) Display line's length"
print "3) Display line's slope"
print "4) Quit program"
choice_string = raw_input("Make a choice: ")

try:
choice = int(choice_string)
except ValueError:
sys.exit("Not an integer!  Goodbye!")

if choice == 1:
print line
elif choice == 2:
line_length = line.length()
print "Length is %f " % line_length
elif choice == 3:
line_slope = line.slope()
print "Slope is %f " % line_slope
elif choice == 4:
print "Goodbye!"
else:
sys.exit("Wrong response Goodbye!")

For the most part, my script works fairly well except under the following circumstances:

Creating a Line
Enter a x1 value: 0
Enter a y1 value: 0
Enter a x2 value: 0
Enter a y2 value: 1
What are the lines attributes?
Select one:
1) Display line
2) Display line's length
3) Display line's slope
4) Quit program
Make a choice: 3
Traceback (most recent call last):
File "line.py", line 79, in ?
line_slope = line.slope()
File "line.py", line 42, in slope
line_slope = dist_y/dist_x
ZeroDivisionError: float division

Basically, if the two the x values are the same, I will get a ZeroDivisionError.  A line in this case would simply point straight up.  What would slope be in this case?  I will admit that this is probably a math problem not a programming one, but I decided to run it by you anyway.

Thanks.

```