Ошибка была в этом: когда вы делаете присваивание переменной в области видимости, она становится локальной в этой области и скрывает другие переменные с таким же именем во внешних областях.
https://pythonworld.ru/osnovy/faq.html
В каждой ф-ии, где я использовал k, я объявлял ее как глобальную global k