0
from math import *
class GeometricObject():
     def __init__(self, color = "green", filled = True):
        self.color = color
        self.filled = filled

    def __str__(self):
        return "color: " + self.__color + \
               " and filled: " + str(self.__filled)


class Triangle(GeometricObject):
    def __init__(self, side1 = 1, side2 = 1, side3 = 1):
        super().__init__()
        self.side1 = float(side1)
        self.side2 = float(side2)
        self.side3 = float(side3)

    def getArea(self):
        return self.area

    def setArea(self, side1, side2, side3):
        s = (side1 + side2 + side3)/2
        area = sqrt(s*(s-side1)*(s-side2)*(s-side3))
        self.area = area

    def getPerimeter(self):
        return self.perimeter

    def setPerimeter(self, side1, side2, side3):
        perimeter = side1 + side2 + side3
        self.perimeter = perimeter

    def __str__(self):
        return "Triangle: " + "side 1 = " + str(self.side1)+ \
               " " + "side 2 = " + str(self.side2) + " " + \
                "side 3 = " + str(self.side3)

def main():
    side1 = eval(input("Enter a value for side 1: "))
    side2 = eval(input("Now enter a value for side 2: "))
    side3 = eval(input("Now enter a value for side 3: "))
    color = input("Enter the color of the triangle: ")
    filled = input("Enter true(filled) or false(not filled) " + \
                   "for the triangle being filled: ")
    go = GeometricObject(color, filled)
    tri = Triangle(side1, side2, side3)
    tri.setArea(side1, side2, side3)
    tri.setPerimeter(side1, side2, side3)

    print("\n\n")
    print("A Triangle: ", tri.__str__(), go.__str__())
    print("The area is: ", tri.getArea())
    print("The perimeter is: ", tri.getPerimeter())

main()

上記は私のコードと私が理解していないエラーです。ほとんどのコードは本の例から直接のものであり、私のプログラムに合うように調整されています。これを必要な方法で機能させるにはどうすればよいですか。これは宿題のためのものであり、コードの何が問題になっているのかを理解するために実際にいくつかの助けを使うことができます。

これは実際にはエラーではありませんが、GeometricObjectの色と塗りつぶされたプロパティを取得して、他の三角形の情報の後に表示するにはどうすればよいですか。

Enter a value for side 1: 3
Now enter a value for side 2: 4
Now enter a value for side 3: 5
Enter the color of the triangle: blue
Enter 1(filled) or 0(not filled) for the triangle being filled: 1



A Triangle:  Triangle: side 1 = 3.0 side 2 = 4.0 side 3 = 5.0 <__main__.GeometricObject object at 0x000000000312EA20>
The area is:  6.0
The perimeter is:  12
4

2 に答える 2

1

問題は、のインスタンス変数tri.__str__が正しくアクセスされていないことです。クラスのインスタンスに属する変数にアクセスするには、名前の前に次のように付ける必要があります。self.

変数名も関数内で正しくありません。変数名は、、、__side1および__side2である必要があり__side3ます。

__str__関数をこれに置き換えれば、機能するはずです。

def __str__(self):
    return "Triangle: " + "side 1 = " + str(self.__side1) +\
            "side 2 = " + str(self.__side2) + "side 3 = " + str(self.__side3)
于 2012-11-13T01:28:39.783 に答える
1

あなたの問題はこの関数にあります:

def __str__(self):
  return "Triangle: " + "side 1 = " + str(side1) +\
    "side 2 = " + str(side2) + "side 3 = " + str(side3)

NameErrorは、変数'side1'がそのスコープで宣言されていないため、変数'side1'を認識しないと言っています。

さて、質問:side1、side2、side3はどこから参照されますか?どうすれば変更できますか?

于 2012-11-13T01:29:01.063 に答える