2016-04-05 19 views
0

帮助!我明天有这个程序,要求它必须具有topLeft拐角的X,Y笛卡尔坐标和bottomRight拐角的X,Y笛卡尔坐标作为raw_input。然后打印周边,区域和这两个位置。 但是我不能让raw_input工作。我曾尝试将其转换为整型,分割和多个赋值。具有笛卡尔坐标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',它们是松散的微小* class *工厂,使它们感觉自然。如果'P'是一个名为tuple class的点,则可以执行'top = P(x = xt,y = yt)'和'top.x top.y'。它看起来很自然。 –

相关问题