2016-04-05 5 views
0

Помощь! У меня есть эта программа завтра, требования состоят в том, что она должна иметь декартовы координаты X, Y верхнего угла угла и декартовых координат X, Y нижнего угла в качестве raw_input. Затем он печатает периметр, область и эти две позиции. Однако я не могу заставить raw_input работать. Я попытался преобразовать его в int, split и несколько присваиваний.Класс прямоугольника с raw_input декартовых координат?

topLeft = int(raw_input ('Please enter a coordinate==>')).split() 
bottomRight= int(raw_input ('Please enter a coordinate==>')).split() 
class Rectangle: 
    def __init__(self, topLeft, bottomRight): 
     self.tL = topLeft 
     self.bR = bottomRight 
    def perim(self): 
     return (2 * (self.tL)) + (2 * (self.bR)) 
    def area(self): 
     return (self.tL) * (self.bR) 
    def position(self): 
     return (self.tL, self.bR) 
    def __str__(self): 
     return "Rectangle(%s, %s)" % (self.tL, self.bR) 

r1 = (Rectangle (topLeft,bottomRight)) 
print r1 
print "Perimeter: %s" % r1.perim() 
print "Area: %s" % r1.area() 
print "Position: (%s, %s,)" % r1.position() 

Это моя ближайшая попытка, но я все еще получаю ошибку:

Traceback (most recent call last): 
    File "C:\Users\Mary\Desktop\Python Programs\Rectangle.py", line 1, in <module> 
    topLeft = int(raw_input ('Please enter a coordinate==>')).split() 
ValueError: invalid literal for int() with base 10: '(5,10)' 

ответ

0

Как это было будет работать? Вы совершили много ошибок.

tx, ty = raw_input("tx ty: ").split() # the input is "4 5", int("5 4")??? 
bx, by = raw_input("bx by: ").split() 

Тогда

self.tx = int(tx) 
self.ty = int(ty) 
# and so on ... 
# If you want to work with tuples `(xt,yt)` Make both int first. 

. И все ваши методы класса неверны, например perimeter = 2*(bx-tx) + 2*(ty-by) не 2*(tx,ty) + 2*(bx,by). Семантически это не имеет смысла.

+0

Я новичок, благодарю вас за вашу помощь! Я вошел и скорректировал свои методы класса, я получил их для кого-то другого, но у вас было гораздо больше смысла. Я не понял, что мне нужно проверить целые числа внутри самого класса. Теперь он отлично работает. –

+0

Лучший подход к работе с координатами - сделать их естественными, используя 'collections.namedtuple', которые являются слабо крошечными * классами * фабриками. если 'P' - это точечный класс namedtuple, вы можете сделать' top = P (x = xt, y = yt) 'и' top.x top.y'. Это будет выглядеть очень естественно. –

Смежные вопросы