Python

В чем может быть ошибка?

Здравствуйте, не получается почему-то решить задачу
Задание:Код: Если что я пока что ищу чисто для 58 числа, так как для всех пока что нет смысла. У меня ошибка почему-то возникает именно в ветвлениях, получается 1111, хотя по логике 10111
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) 
EP
Evgenij Parinov
12 091
Лучший ответ
Анатолий Садовой Спасибо, готовлю к егэ с 10 класса, сейчас перехожу в 11. И сейчас я могу уже набирать 58 баллов, не считая эту задачу(хочу до сентября дойти до 70+ баллов). И готовиться самому не так уж и трудно, но дискомфортно, так как негде задавать вопросы насчёт егэ, но есть маил ру:) Спасибо тебе огромное за объяснение!
13 -> 1101 -> переворачиваем -> 1011 -> 11
Добавление нуля справа к двоичному числу - это умножение на 2:
11 * 2 = 22
22 * 2 = 44
44 * 2 = 88
Ответ: 88 (1011000)

Для этого не надо писать код. Но если хочешь кодом, то:
 import math
t = int(bin(13)[:1:-1], 2) # инверсия числа 13
e = int(math.log2(100 // t)) # кол-во добавляемых нулей
print(t * 2 ** e)
Сергей Орлов
Сергей Орлов
74 614
Ваш код работает неправильно, потому что он удаляет все нули в строке b, а не только ведущие нули. Вот исправленный код, который удаляет только ведущие нули:
 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.
АМ
Аскар Максот
25 860
В вашей жизни
Erlan Sooronbaev
Erlan Sooronbaev
339
Анатолий Садовой А мне кажется в твоей
Ведущие нули это вообще то старший первый бит. Если он есть то его нужно убрать. То есть 011011 - > 11011, а если первое число не 0 то и не надо отбрасывать все нули
Haik Sahakian
Haik Sahakian
304
Haik Sahakian Вы отбрасываете все нули
Haik Sahakian Вам нужно проверять первый бит