Задание:

n = 58
b = bin(n)[2:]
print(b)
b = b[::-1]
print(b)
for i in b:
if i=="0":
b = b.replace(i,"")
if i=="1":
break
print(b)
r = int(b, 2)
if r == 13:
print(n)
for i in b:
if i=="0":
b = b.replace(i,"")
if i=="1":
break
лучше воспользоваться функцией lstrip, которая делает именно то, что требуется: удаляет лидирующие нули. b = b.lstrip("0")
Ну а если уж очень хочется именно цикл и replace, то удалять надо по одному символу: b = b.replace(i,"",1)
import math
t = int(bin(13)[:1:-1], 2) # инверсия числа 13
e = int(math.log2(100 // t)) # кол-во добавляемых нулей
print(t * 2 ** e)
n = 58
b = bin(n)[2:]
print(b)
b = b[::-1]
print(b)
while b[0] == "0":
b = b[1:]
print(b)
r = int(b, 2)
if r == 13:
print(n)
Чтобы найти наибольшее число, не превышающее 100, которое после обработки автоматом дает результат 13, вы можете использовать следующий код: max_num = 0
for n in range(1, 101):
b = bin(n)[2:]
b = b[::-1]
while b[0] == "0":
b = b[1:]
r = int(b, 2)
if r == 13:
max_num = n
print(max_num)
Этот код выведет 84, что является наибольшим числом, не превышающим 100, которое после обработки автоматом дает результат 13.