You are on page 1of 5

‫פתרון למבחן בפייתון‬

class GeometricObject:
def __init__(self, name = "un known",
shape = "un known",
color = "black",
filled = False):
self.__name = name
self.__shape = shape
self.__color = color
self.__filled = filled

def getName(self):
return self.__name

def getShape(self):
return self.__shape

def getColor(self):
return self.__color

def getFilled(self):
return self.__filled

def isFilled(self):
return self.__filled

def writeObject(self, outFile):


outFile.write(self.__str__())

def __str__(self):
return (f"name: {self.__name} "
f"shape: {self.__shape} "
f"\t\t color: {self.__color}, filled:
{self.__filled}")

from geometricObject import GeometricObject

class Polygon(GeometricObject):
def __init__(self,
name="un known",
shape="un known",
numberOfSides=0,
color="black",
filled=False):
if numberOfSides <= 2:
raise ValueError(f"name: {name}, shape:
{shape}, numberOfSides = {numberOfSides} must be > 2")

self.__numberOfSides = numberOfSides
super().__init__(name, shape, color, filled)

def getNumberOfSides(self):
return (self.__numberOfSides)

def writeObject(self, outFile):


outFile.write(self.__str__())

def __str__(self):
return f"{super().__str__()}, numberOfSides:
{self.getNumberOfSides()}"

import math
from polygon import Polygon

class Triangle(Polygon):
def __init__(self, a=5, b=4, c=3,
color="Black", filled=False, name="no-
name"):
if a <= 0 or b <= 0 or c <= 0:
raise ValueError(f"all sides must be > 0, a:
{a}, b: {b}, c: {c}")

l = [a, b, c]
l.sort()

self.__side1 = l[0]
self.__side2 = l[1]
self.__side3 = l[2]

if self.__side1 + self.__side2 <= self.__side3:


raise ValueError(f"name: {name} shape:
triangle, "
f"side1: {self.__side1},
side2: {self.__side2}, side3: {self.__side3} side_1 +
side_2 must be > side_3")

super().__init__(name=name,
shape="triangle",
numberOfSides=3,
color=color,
filled=filled)

def isEquilateral(self):
if self.__side1 == self.__side2 and self.__side2
== self.__side3 and self.__side1 == self.__side3:
return True
else:
return False

def isIsosceles(self):
if self.__side1 == self.__side2 or self.__side2
== self.__side3 or self.__side1 == self.__side3:
return True
else:
return False

def isRightAngled(self):
s1_sqaure = self.__side1 * self.__side1
s2_sqaure = self.__side2 * self.__side2
s3_sqaure = self.__side3 ** 2 # or self.__side3
* self.__side3

if s1_sqaure + s2_sqaure == s3_sqaure:


return True
else:
return False

def getSide1(self):
return self.__side1

def getSide2(self):
return self.__side2

def getSide3(self):
return self.__side3

def getArea(self):
s = (self.__side1 + self.__side2 +
self.__side3) / 2
area = math.sqrt(
s * (s - self.__side1) * \
(s - self.__side2) * (s - self.__side3))
return area

def getPerimeter(self):
return self.__side1 + self.__side2 + self.__side3

def writeObject(self, outFile):


outFile.write(self.__str__())

def __str__(self):
return (f"{super().__str__()}\n side1:
{self.__side1}, side2: {self.__side2}, side3:
{self.__side3},\n"
f" area: {self.getArea()}, perimeter:
{self.getPerimeter()}\n"
f" isEquilateral: {self.isEquilateral()}\
b isIsosceles: {self.isIsosceles()}\b isRightAngled:
{self.isRightAngled()}")

from triangle import Triangle


from polygon import Polygon
from geometricObject import GeometricObject
def main():
outfile = open("results.txt", 'w')
outfile.write("list of wrong geometric objects:\n")
l = []

try:
l.append(Triangle(name="triangle 3",
a=3.5, b=4.5, c=8,
color="green", filled=True))
except ValueError as e:
outfile.write(str(e))

try:
l.append(Triangle(name="triangle 1"))
except ValueError as e:
outfile.write(str(e))

try:
l.append(Triangle(name="triangle 2", a=3, b=3,
c=3))
except ValueError as e:
outfile.write(str(e))

try:
l.append(Triangle(name="triangle 5", a=2, b=3,
c=3))
except ValueError as e:
outfile.write(str(e))

try:
l.append(Triangle(name="triangle 4", a=7, b=5,
c=4,
color="Red", filled=True))
except ValueError as e:
outfile.write(str(e))

try:
l.append(Triangle(name="triangle 6", a=1, b=2,
c=3,
color="Yellow", filled=True))
except ValueError as e:
outfile.write(str(e))

try:
l.append(Polygon(name="polygon 2",
numberOfSides=4,
shape="square",
color="Purple",
filled=True))
except ValueError as e:
outfile.write(str(e))

try:
l.append(Polygon(name="polygon 1"))
except ValueError as e:
outfile.write(str(e))

try:
l.append(GeometricObject(name="z_geometric object
1",
filled=True,
color="blue",
shape="circle"))
except ValueError as e:
outfile.write(str(e))

outfile.write(
"\n\nlist of correct geometric objects\n"
+ " sorted by shape (primary sort)\n"
+ " and name (secondary sort):\n")

l.sort(key=lambda item: (item.getShape(),


item.getName()))

for o in l:
o.writeObject(outfile)
outfile.write("\n")
outfile.close()

main() # Call the main function

You might also like