1
+
2
+ class RealProperty :
3
+ def __init__ (self , rooms : int , square_meters : int , price_per_sqm : int , description : str ):
4
+ self .rooms = rooms
5
+ self .square_meters = square_meters
6
+ self .price_per_sqm = price_per_sqm
7
+ self .description = description
8
+
9
+ def bigger (self , compared_to ):
10
+ return self .square_meters > compared_to .square_meters
11
+
12
+ def price_difference (self , compared_to ):
13
+ # Function abs returns absolute value
14
+ difference = abs ((self .price_per_sqm * self .square_meters ) - (compared_to .price_per_sqm * compared_to .square_meters ))
15
+ return difference
16
+
17
+ def more_expensive (self , compared_to ):
18
+ difference = (self .price_per_sqm * self .square_meters ) - (compared_to .price_per_sqm * compared_to .square_meters )
19
+ return difference > 0
20
+
21
+ def __repr__ (self ):
22
+ return (f'RealProperty(rooms = { self .rooms } , square_meters = { self .square_meters } , ' +
23
+ f'price_per_sqm = { self .price_per_sqm } , description = { self .description } )' )
24
+
25
+
26
+ def cheaper_properties (properties : list , reference : RealProperty ):
27
+ return [(property , property .price_difference (reference )) for property in properties if not property .more_expensive (reference ) and property .price_difference (reference ) != 0 ]
28
+
29
+
30
+ if __name__ == '__main__' :
31
+ a1 = RealProperty (1 , 16 , 5500 , "Central studio" )
32
+ a2 = RealProperty (2 , 38 , 4200 , "Two bedrooms downtown" )
33
+ a3 = RealProperty (3 , 78 , 2500 , "Three bedrooms in the suburbs" )
34
+ a4 = RealProperty (6 , 215 , 500 , "Farm in the middle of nowhere" )
35
+ a5 = RealProperty (4 , 105 , 1700 , "Loft in a small town" )
36
+ a6 = RealProperty (25 , 1200 , 2500 , "Countryside mansion" )
37
+
38
+ properties = [a1 , a2 , a3 , a4 , a5 , a6 ]
39
+
40
+ print (f"cheaper options when compared to { a3 .description } :" )
41
+ for item in cheaper_properties (properties , a3 ):
42
+ print (f"{ item [0 ].description :35} price difference { item [1 ]} euros" )
0 commit comments