Стоколос. 20 Задание, связанное с домами.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/python
import time # библиотека для работы со временем
import os # библиотека для работы с папками (не файлами)
class House: # основной класс для работы с домами
house_id = 0 # номер дома
house_height = 0 # высота дома
house_floors = 0 # этажность дома
house_boxes = 0 # количество квартир в доме
house_porches = 0 # количество подъездов в доме
def __init__(self): # конструктор для текущего класса
self.add_new_house()
def save_data(self):
"""Сохранение информации в файл houses"""
with open('houses', 'a') as data_houses_file:
house_data = f'{self.house_id}:{self.house_height}:{self.house_floors}:{self.house_boxes}:' \
f'{self.house_porches}\n'
data_houses_file.write(house_data)
print(time.strftime('[%X] Информация успешно сохранена!', time.localtime()))
def add_new_house(self):
"""Добавление нового дома, а потом его сохранение в файл при помощи вызова метода save_data()"""
with open('houses', 'r') as id_data_file:
id_data = id_data_file.readlines()
for element in id_data: # перебор строчек во временной переменной, хранящей значения, считанные с файла
element = element.rstrip('\n')
self.house_id = int(element.split(':')[0]) # получение последнего идентификатора дома из файла
self.house_id += 1 # автоматическое добавление 1 к последнему номеру дома в файле
self.house_height = input(f'Введите высоту дома №{self.house_id}: ') # пользователь вводит высоту дома
self.house_floors = input(f'Введите количество этажей дома №{self.house_id}: ') # пользователь вводит этажность дома
self.house_boxes = input(f'Введите количество квартир дома №{self.house_id}: ') # пользователь вводит кол-во квартир в доме
self.house_porches = input(f'Введите количество подъездов дома №{self.house_id}: ') # пользователь вводит кол-во подъездов в доме
self.save_data() # сохраняем данные
def show_all_houses():
"""Показывает все дома в консоли"""
print('ИНФОРМАЦИЯ О ДОМАХ: ')
with open('houses', 'r') as all_houses_file: # открывааем поток для чтения файла
all_houses = all_houses_file.readlines() # считываем файл построчно
for house in all_houses: # перебираем это все
if int(house.split(':')[0]) != 0: # если номер дома не равен нулю
print(f"Номер: {house.split(':')[0]} | Высота: {house.split(':')[1]} "
f"| Этажей: {house.split(':')[2]} | Квартир: {house.split(':')[3]} | "
f"Подъездов: {house.split(':')[4]}")
time.sleep(0.7) # задержка в отображении в 0.7 сек
else:
continue
if os.path.exists('houses'): # если файл есть в системе
cmd = input(time.strftime('[%X] Показать, добавить или выход: ', time.localtime()))
while cmd.lower() != 'выход':
if cmd.lower() == 'показать':
show_all_houses() # показать все дома
elif cmd.lower() == 'добавить':
house = House() # добавить новый дом
else:
print(f'[%X]: Неизвестная команда! Используйте "показать", "добавить" или "выход".', time.localtime()) # неизвестная команда для программы
cmd = input(time.strftime('[%X] Показать, добавить или выход: ', time.localtime()))
else: # если файла нет в системе, то создать его, но требуется перезапустить программу для корректной работы
with open('houses', 'w') as first_houses_file:
first_houses_file.write(f'0:0:0:0:0\n')
print(time.strftime('[%X]: Запустите программу еще раз!', time.localtime()))
exit()