Попробуйте упростить логику c, и вы увидите свою проблему. Ваша текущая логика c:
try:
while True:
<get number>
if <want to quit>: sys.exit()
if <number is good>: break
while True:
if <done>: break
<step>
except KeyboardInterrupt:
sys.exit()
Звучит так, как будто вы хотите что-то более похожее на
try:
while True:
while True:
<get number>
if <want to quit>: sys.exit()
if <number is good>: break
while True:
if <done>: break
<step>
except KeyboardInterrupt:
sys.exit()
Вы путаете тот факт, что вы используете циклы для получения ввода и вычисления пути с необходимостью использовать al oop для продолжения этого процесса. Функции сделают это намного более очевидным.