Проверьте мой код, пожалуйста, подскажите в чём ошибка

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

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

  2. Если N кратно 3, то в конец троичной записи числа дописываются три последние цифры троичной записи числа. Иначе в конец троичной записи числа дописывается остаток от деления n на 3, умноженный на 3, записанный в троичной записи.

Полученная таким образом запись является троичной записью искомого числа R. Укажите минимальное число N, после обработки которого автомат получает число, большее 150.

В ответе это число запишите в десятичной системе.

def to_3(n):
    n3 = ""
    while n > 0:
        n3 += str(n % 3)
        n = n // 3
    return n3 [:: -1]
a = []
for n in range(1, 1000):
    n3 = to_3(n)
    if n % 3 == 0:
      n3 += n3[:-3]
    else:
      n3 += to_3 ((n % 3) * 3)
    r = int(n3, 3)
    if r > 150:
        a.append(r)
print(n)

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

Автор решения: CrazyElf

Ошибки две:

  1. Неправильный срез числа
  2. После нахождения нужного порога нужно просто сразу выводить число n и выходить из цикла
def to_3(n):
    n3 = ""
    while n > 0:
        n3 += str(n % 3)
        n = n // 3
    return n3 [:: -1] # <- здесь убрал табуляцию

#a = [] # <- не нужно
for n in range(1, 1000):
    n3 = to_3(n)
    if n % 3 == 0:
        n3 += n3[-3:] # <- изменил срез
    else:
        n3 += to_3 ((n % 3) * 3)
    r = int(n3, 3)
    if r > 150:
        #a.append(r) # <- не нужно
        print(n) # <- добавил две табуляции
        break # <- добавил break

Кроме того, поскольку у вас уже есть число в троичной форме, вы можете произвести проверки и дописывание по-другому - используя троичную запись чисел:

    if n3[-1] == '0':
        n3 += n3[-3:]
    else:
        n3 += n3[-1] + '0'
→ Ссылка