Python одиночная выборочная замена цифр

Python Задача такова: заменить цифру в даном цисле так, чтобы оно нацело делилось на 3. Цифру заменять обязательно. Даже если и до этого делилось на 3. Менять можно только одну цифру. После найти наибольшее возможное число и вывести его.

Пример: Input: 1, out:3. ----- Input: 21, out: 24. ----- Input 454, out: 456.

Вывод должен быть натуральным числом. Мучился с кодом. Ничего поделать не могу. Даже не дописал до конца.

x_conserv = list(input())
x = x_conserv
predictions = []

for index in range(len(x)): 
    for num in range(0, 10): 
        x[index] = num
        predictions.append(x)


print(x_conserv, x)
print(predictions)

Абсолютно не понимаю почему вывод -

[9, 9] [9, 9]
[[9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9], [9, 9]]

Из своих экспериментов я понял только то, что "=" работает в две стороны. Но это противоречит моим прежним знаниям. Да и потом написал программу, которая опровергла это. Короче запутался я. Спасити пожалуйста). Благодаю.


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

Автор решения: Константин Николаевич Бояр II

Как работает ваш код:

Вы вводите x_conserv, потом в цикле перебираете кол-во элементов, зачем-то повторяете все это 10 раз, и выводите x_conserv, x и predictions, по сути 3 списка которые продублировались очень много раз без причины, на самом деле вам хватило бы вот такого кода:

x_conserv = [1, 20, 454]
predictions = []

for index in x_conserv :
    while int(index) % 3 != 0:
        index += 1
    predictions.append(index)


print(x_conserv)
print(predictions)

Вот ввод и вывод:

[1, 21, 454]
[3, 21, 456]

Если Вам нужно именно вводить числа с клавиатуры, используйте вот этот вариант

x = input().split()
x_conserv = list(map(int, x))
predictions = []

for index in x_conserv :
    while int(index) % 3 != 0:
        index += 1
    predictions.append(index)


print(x_conserv)
print(predictions)
→ Ссылка