Skip to content

Instantly share code, notes, and snippets.

@IgorZyktin
Created December 7, 2021 10:52
Show Gist options
  • Select an option

  • Save IgorZyktin/edd84c38db367134b131f7b913062401 to your computer and use it in GitHub Desktop.

Select an option

Save IgorZyktin/edd84c38db367134b131f7b913062401 to your computer and use it in GitHub Desktop.
from pprint import pprint
from random import randint
class Room:
def __init__(self, a, b):
self.a = a
self.b = b
def s(self):
return self.a * self.b
def __str__(self):
return str(self.a) + 'x' + str(self.b)
class Flat1:
def __init__(self, size):
self.kitchen = Room(size[0], size[1])
self.hall = Room(size[2], size[3])
def s(self):
return self.kitchen.s() + self.hall.s()
def __str__(self):
return '1комн квартира с кухней ' + str(
self.kitchen) + ' и гостиной ' + str(self.hall)
class Flat2(Flat1):
def __init__(self, size):
super().__init__(size)
self.bedroom = Room(size[4], size[5])
def s(self):
return Flat1.s(self) + self.bedroom.s()
def __str__(self):
return '2комн квартира с кухней ' + str(
self.kitchen) + ', гостиной ' + str(self.hall) \
+ ' и спальней ' + str(self.bedroom)
class House:
def __init__(self, size):
self.flats = []
for s in size:
if s[4] == 0:
self.flats.append(Flat1(s))
else:
self.flats.append(Flat2(s))
def __str__(self):
s = 'Дом:\n'
for f in self.flats:
s += str(f) + '\n'
return s
def count_flats(self):
flats = {}
for flat in self.flats:
key = str(flat)
flats[key] = flats.get(key, 0) + 1
return flats
def min_max(self):
_min = 99999999999
_max = 0
for flat in self.flats:
_min = min(_min, flat.s())
_max = max(_max, flat.s())
return _min, _max
def avg(self):
flats = {}
for flat in self.flats:
key = str(flat)
if key in flats:
flats[key]['area'] += flat.s()
flats[key]['total'] += 1
else:
flats[key] = {
'area': flat.s(),
'total': 1,
}
average = {}
for key, parameters in flats.items():
_avg = parameters['area'] / parameters['total']
average[key] = _avg
return average
def main():
# n = int(input('Сколько квартир '))
n = 7
size = [[randint(3, 6)] * 6 for _ in range(n)]
for i in range(len(size)):
if randint(1, 2) == 1:
size[i][4] = 0
size[i][5] = 0
house = House(size)
print(house)
print('Количество квартир разного типа:')
pprint(house.count_flats())
print()
_min, _max = house.min_max()
print(f'Минимальная площадь квартиры: {_min} кв.м.')
print(f'Максимальная площадь квартиры: {_max} кв.м.')
print()
print(f'Средние площади квартир:')
pprint(house.avg())
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment