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. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor