Как правильно и красиво переписать этот код

Создаю приложение pyqt5. Есть такой кусок кода, который записывает состояние чекбоксов во флаги и в соответствии с этими состояниями добавляет в текстовую переменную названия выбранных этапов. Этот код работает, но хотелось бы привести его к нормальному виду(изменение индексов в цикле, например). Как это можно сделать?

self.flag_stage1 = self.check_stage1.isChecked()
self.flag_stage2 = self.check_stage2.isChecked()
self.flag_stage3 = self.check_stage3.isChecked()
self.text_stage = ""
if self.flag_stage1 is True:
    self.text_stage = self.text_stage + "   Этап 1\n"
if self.flag_stage2 is True:
    self.text_stage = self.text_stage + "   Этап 2\n"
if self.flag_stage3 is True:
    self.text_stage = self.text_stage + "   Этап 3\n"
if (self.flag_stage1 or self.flag_stage2 or self.flag_stage3) is False:
    self.text_stage = "Ни один этап не выбран\n"
self.logBrowser.append(log("Испытание запущено\n"
                           "Выбранные этапы:\n" + self.text_stage))

Ответы (1 шт):

Автор решения: insolor

Можно переписать примерно так (от промежуточных flag_stage вообще решил избавиться, просто проходим циклом по чекбоксам):

check_stages = [self.check_stage1, self.check_stage2, self.check_stage3]

text_stages = ""
for i, check_stage in enumerate(check_stages, start=1):
    if check_stage.isChecked():
        text_stages += f"   Этап {i}\n"

if not text_stages:  # Текст пустой, значит ничего не было выбрано
    text_stages = "Ни один этап не выбран\n"

self.logBrowser.append(log("Испытание запущено\n"
                           "Выбранные этапы:\n" + text_stages))

Еще вариант, не собираем строку text_stages, а формируем список этапов, и только в конце объединяем в общую строку:

stages = [f"   Этап {i}" for i, check_stage in enumerate(check_stages, start=1)
          if check_stage.isChecked()]

if not stages:  # Список пустой, значит ничего не было выбрано
    text_stages = "Ни один этап не выбран\n"
else:
    text_stages = "\n".join(stages)
→ Ссылка