Для начала я бы рекомендовал сделать маленький, но рабочий фрагмент вашего кода, отображающий именно вашу проблему. Потому что даже смотреть на длинную простыню кода не особо хочется (хотя он и снабжен комментариями).
Советую сделать маленькую модельку, чтоб любой взял, скопировал, запустил и посмотрел на проблему, а не на всё это великолепие.
Евгений, Фрагменты кода надо размещать в виде текста и оборачивать тэгом code для корректного отображения. Удобно делать кнопкой </> Это обязательно, см.п.3.8 Регламента.
Сюда же относится traceback, ввод и вывод в консоли и другая структурированная текстовая инфа.
Также лучше переместить код в тело вопроса и дополнить вопрос подробностями.
Покажите, как вы пробовали решить проблему, приведите код попытки (пусть неудачной), опишите, как запускали, что ожидали и что получилось.
За готовыми решениями - на фриланс. В текущем виде это не вопрос, а задание. Нарушен п.5.12 Регламента.
Во-первых, вопрос надо нормально оформить - убрать лирику (п.3.4 Регламента), сделать нормальное название (п.3.6 Регламента)
Во-вторых, условие, приведенное словами, по-моему не соответствует приведенному ожидаемому результату.
Надо уточнить вопрос.