Почему программа не видит переменную o2?

Первая часть кода работает нормально, однако когда начинается вторая часть, то программа выдает ошибку

  Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом: 1.  Строится двоичная запись числа N. 2.  Подсчитывается количество чётных и нечётных цифр в десятичной записи заданного числа. Если в десятичной записи больше чётных цифр, то в конец двоичной записи дописывается 1, если нечётных  — 0. Если чётных и нечётных цифр в десятичной записи поровну, то в конец двоичной записи дописывается 0, если данное число чётное, и 1  — если нечётное. 3−4. Пункт 2 повторяется для вновь полученных чисел ещё два раза. 5.  Результатом работы алгоритма становится десятичная запись полученного числа R. Пример. Дано число N  =  14. Алгоритм работает следующим образом: 1.  Строим двоичную запись: 1410  =  11102 . 2.  В записи числа 14 чётных и нечётных цифр поровну. Число 14 чётное, дописываем к двоичной записи 0, получаем 111002   =  2810. 3.  В записи числа 28 чётных цифр больше, дописываем к двоичной записи 1, получаем 1110012   =  5710. 4.  В записи числа 57 нечётных цифр больше, дописываем к двоичной записи 0, получаем 11100102   =  11410. 5.  Результат работы алгоритма R  =  114. Определите количество принадлежащих отрезку [123 455; 987 654 321] чисел, которые могут получиться в результате работы этого алгоритма.

NameError: name 'o2' is not defined. Did you mean:

print('Task 1')
k1 = bin(123455)[2:]
k2 = bin(987654321)[2:]
p1=int(k1,2)
p2=int(k2,2)
for n in range(p1 - 10, p1 + 10):
    s = bin(n)[2:]
    for i in range(3):
        count1 = 0
        count2 = 0
        l = int(s, 2)
        while l > 0:
            if l % 2 > 0:
                count1 += 1
            else:
                count2 += 2
            l = l // 10
        if count1 > count2:
            s = s + '1'
        elif count1 < count2:
            s = s + '0'
        elif count1 == count2 and l % 2 == 0:
            s = s + '0'
        else:
            s = s + '1'
    r = int(s, 2)
if 123455 <= r and r <= 987654321:
    o1 = n
    print(o1)
for t in range(p2 - 10, p2 + 10):
    z = bin(t)[2:]
    for i in range(3):
        count1 = 0
        count2 = 0
        a = int(z, 2)
        while a > 0:
            if a % 2 > 0:
                count1 += 1
            else:
                count2 += 2
            a = a // 10
        if count1 > count2:
            z = z + '1'
        elif count1 < count2:
            z = z + '0'
        elif count1 == count2 and a % 2 == 0:
            z = z + '0'
        else:
            z = z + '1'
    r = int(z, 2)
if 123455 <= r and r <= 987654321:
    o2 = t
    print(o2)
print(o2-o1+1)

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