От задачи к решению
Разделяйте большую задачу на шаги. Сначала получите данные, затем проверьте их, выполните преобразование и только после этого покажите результат. Каждый шаг должен отвечать на один понятный вопрос.
Когда результат отличается от ожидаемого, посмотрите на самый маленький пример, который воспроизводит проблему. Запишите ожидаемый ответ и сравните его с тем, что делает программа.
Навык программирования растёт из таких небольших циклов: сформулировать, попробовать, проверить, уточнить. Нельзя выучить все инструменты заранее, но можно научиться задавать хорошие вопросы.