Немного не работает код, просто залагивает при определенном вводе

Такая проблема в этом коде "Проверка гипотезы Коллатца"

  1. Когда вводим начало отрезка и пробел для конца отрезка - все норм"
  2. Когда не вводим начало отрезка и вводим конец - не работает, он просто умирает
  3. Когда не вводим ни начало, ни конец - не работает, он просто умирает
  4. Когда вводим и начало и конец - все работает ИТОГ; он умирает, когда я не ввожу начало, то есть по умолчанию он 0 Помогите это решить.
import sys
def generation(a, b):
    '''Основная функция'''
    if b is None:
        i = a
        while True:
            step = 0
            current_number = i
            while current_number != 1:
                if current_number % 2 == 0:
                    current_number = current_number // 2
                else:
                    current_number = 3 * current_number - 1
                    step += 1
                if step > 1000:
                    step = None
                    break
            yield f"Число {i} - {step} шагов" if step is not None\
                  else f"Число {i} - {step}"
            i += 1
    else:
        for i in range(a, b):
            step = 0
            current_number = i
            while current_number != 1:
                if current_number % 2 == 0:
                    current_number = current_number // 2
                else:
                    current_number = 3 * current_number - 1
                    step += 1
                if step > 1000:
                    step = None
                    break
            yield f"Число {i} - {step} шагов" if step is not None \
                else f"Число {i} - {step}"

def gipotese_kollatca():
    '''Меню'''
    while True:
        print("Введите числа, или нажмите пробел и Enter для \
установки значений по умолчанию:")
        n = input("Введите начало: ")
        while (n != " " and not n.isdigit()):
            print("Введены некорректные данные")
            n = input("Введите начало: ")
        m = input("Введите конец: ")
        while (m != " " and not m.isdigit()):
            print("Введены некорректные данные")
            m = input("Введите конец: ")
        if n>=m and n.isdigit() and m.isdigit():
            print("Конец отрезка должен быть больше начала, некорретно")
        if n == " " and m == " ":
            a = 0
            b = None
        elif n == " " and m.isdigit():
            a = 0
            b = int(m)
        elif m == " " and n.isdigit():
            a = int(n)
            b = None
        else:
            a = int(n)
            b = int(m)
        flag_1 = False
        for i in generation(a, b):
            print(i)
            try:
                print("1 - Продолжит вывод")
                print("2 - Вернётся к выбору отрезка")
                print("3 - Закончит программу")
                cmd1 = input("")
                if cmd1 in ["2", "3"]:
                    if cmd1 == "3":
                        sys.exit()
                    flag_1 = True
                    break
                if cmd1 != "1":
                    raise ValueError
            except ValueError:
                print("Неверный ввод")
        if not flag_1:
            break

def main():
    '''Конец'''
    while True:
        gipotese_kollatca()
        print("Заданный вами отрезок закончился\n"
              "Хотите продолжить? Если да, нажмите 0\n"
               "Хотите завершить программу? Если да, нажмите 9\n")
        cmd_2 = input()
        match cmd_2:
            case '9':
                print("Работа программы завершена")
                break
            case '0':
                continue
            case _:
                print("Введите корректные данные")



if __name__ == "__main__":
    main()

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