Top.Mail.Ru
Ответы

Код работает, но ответ не выводится, питон

Текст задачи:
Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам.

1.  Перемножаются отдельно первая и вторая цифры, а также вторая и третья цифры.

2.  Полученные два числа записываются друг за другом в порядке невозрастания без разделителей.

Пример. Исходное число: 179. Произведения: 1 · 7  =  7; 7 · 9  =  63. Результат: 637.



Укажите наименьшее число, при обработке которого автомат выдаёт результат 123.
Мой код:

1234567891011121314151617
 for N in range (100, 1000): 
    n = list(map(int, str(N))) 
    n1, n2 = int(n[0]) * int(n[1]), int(n[1]) * int(n[2]) 
    if n1 > n2: 
        n3 = int(str(n2) + str(n1)) 
        if n3 == 123: 
            print(N, n3) 
        else: 
            pass 
    elif n1 < n2: 
        n3 = int(str(n1) + str(n2)) 
        if n3 == 123: 
            print(N, n3) 
        else: 
            pass 
    else: 
        pass 

Что не так?

По дате
По рейтингу
Аватар пользователя
Новичок
11мес

ЗАЧЕМ писать для этого программу? Задача решается в уме за несколько секунд.
123 -> 12|3 -> 4 * 3 | 3 * 1 -> 1, 3, 4 -> 134

Но если так хочется кодом, то:

1234
 for n in range(100, 1000): 
  t = list(map(int, str(n))) 
  if ''.join(map(str, sorted([t[0] * t[1], t[1] * t[2]], reverse=True))) == '123': break 
print(n) 
Аватар пользователя
11мес

Ваш код имеет несколько проблем, которые могут мешать ему корректно работать. Давайте разберем их и исправим:

Проверка условия: Вы проверяете, что n3 равно 123, но не сохраняете найденное значение. Вам нужно сохранить наименьшее значение N, которое удовлетворяет условию.

Пропущенный случай: Если n1 равно n2, ваш код пропускает этот случай, хотя он тоже может быть решением.

Неоптимальный подход: Ваш код проверяет все числа от 100 до 999, что может быть неэффективно.

Вот исправленный код:

123456789101112131415
 min_N = 1000  # Начальное значение для поиска минимального N 
 
for N in range(100, 1000): 
    n = list(map(int, str(N))) 
    n1, n2 = n[0] * n[1], n[1] * n[2] 
     
    if n1 >= n2: 
        n3 = int(str(n1) + str(n2)) 
    else: 
        n3 = int(str(n2) + str(n1)) 
     
    if n3 == 123: 
        min_N = min(min_N, N) 
 
print(min_N) 

Этот код находит наименьшее число N, которое при обработке автоматом дает результат 123. Он проверяет все числа от 100 до 999 и сохраняет наименьшее значение N, которое удовлетворяет условию.

Аватар пользователя
Мудрец
11мес

pass вообще там зачем? Эта команда не для такого что тебе кажется, это просто временная заглушка для функции во время написания и обмозгования кода. Типа "вот тут нужна функция, но пока нужно только напоминание что эта функция здесь нужна, а реализуем ее потом..."
pass прописывают только в таких случаях. В итоговом коде никаких pass нет

Удаленный ответ Ответ удалён