Нужна помощь с кодом

Я недавно начал изучать питон и готовлюсь к егэ нужна помощь

for n in range(100, 1, -1):
    s = bin(n)[2:]
    s = str(s)
    s += str(s.count ('1') % 2)
    s += str(s.count ('1') % 2)
    r = int(s, 2)
    if r < 90:
       print (r)
       break

вот цикл
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число следующим образом.

  1. Строится двоичная запись числа N.

  2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления суммы на 2.

  3. Предыдущий пункт повторяется для записи с добавленной цифрой.

Какое наибольшее число, меньшее 90, может появиться на экране в результате работы автомата?

  1. Результат переводится в десятичную систему и выводится на экран.
    Какое наибольшее число, меньшее 90, может появиться на экране в результате работы автомата?

вот задача
и я не могу понять почему в начальной строке берется 100 1 и -1 зачем -1
str(s.count (‘1’) и зачем здесь 1

Такие параметры у этой функции. Начало, конец, шаг. Python range() Function

Цикл for просто проходит все числа, которые эта функция возвращает.

Видимо чтобы узнать сколько единиц в строке.
Python String count() Method

для двоичного числа количество единиц в двоичной записи равно

сумме всех цифр.

так что трюк с подсчётом единичек используется для определения суммы всех цифр в строке.

собственно, вот тут в подобной задаче используется прямая функция для суммирования:

def f(s):
    summa = 0
    for i in range(len(s)):
        summa += int(s[i])
    return summa
for n in range(1, 100):
    s = bin(n)[2:]  # перевод в двоичную систему
    s = str(s)
    summa = f(s)
    s = s + str(summa % 2)
    summa = f(s)
    s = s + str(summa % 2)
    r = int(s, 2)  # перевод в десятичную систему
    if r > 93:
        print(r)
        break

на строчку if r > 93 - не обращайте внимания, 93 в условиях той задачи, откуда я взял код решения

Спасибо большое ребят

Спасибо
:+1: :+1: :+1:

Спасибо

for n in range(1, 100):
    s = bin(n)[2:]  # перевод в двоичную систему
    s = str(s)
    s += str(s.count("1") % 2)
    s += str(s.count("1") % 2)
    r = int(s, 2)  # перевод в десятичную систему
    if r > 77:
        print(n)
        break

а почему здесь только 1 и 100 в цикле
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

  1. Строится двоичная запись числа N.

  2. К этой записи дописываются справа ещё два разряда по следующему правилу:

а) складываются все цифры двоичной записи числа N, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

б) над этой записью производятся те же действия — справа дописывается остаток от деления суммы её цифр на 2.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R. Укажите такое наименьшее число N, для которого результат работы данного алгоритма больше числа 77. В ответе это число запишите в десятичной системе счисления.
вот задача
и что за функция лен в твоей задаче

Если один аргумент, то это конец (начало по умолчанию 0, шаг по умолчанию 1), если два аргумента, то это начало и конец (а шаг по умолчанию 1), а если три, то начало, конец и шаг (справка range).

В данном случае длина строки (справка len).

1 лайк