2016-04-05 12 views
0

ヘルプ!私はこのプログラムを明日の予定だとしています。その要件は、XとYのデカルト座標をtopLeftコーナーに、X、Yのデカルト座標をbottomRightコーナーのraw_inputとして持つ必要があります。次に、周囲、領域、およびこれらの2つの位置を印刷します。 しかし、私はraw_inputを動作させることができません。私はint、分割、および複数の割り当てに変換しようとしました。デカルト座標の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'がポイントクラスのタプルクラスであれば、' top = P(x = xt、y = yt) 'と' top.x top.y'を実行できます。それは非常に自然に見えます。 –

関連する問題