Почему программа не видит переменную 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)