Консультация № 191958
01.12.2017, 19:09
0.00 руб.
0 9 1
Здравствуйте! Прошу помощи в следующем вопросе:

Натуральное число называется числом Армстронга, если сумма цифр числа, возведенных в K -ю степень (где K – количество цифр в числе) равна самому числу. Например,
153 = 1^3 + 5^3 + 3^3 .
Напишите программу, которая находит все числа Армстронга на отрезке [ a , b ] .
Входные данные
Входная строка содержит два натуральных числа – значения a и b , разделённых пробелами. Гарантируется, что a ≤ b .
Выходные данные
Программа должна вывести в одну строчку все числа Армстронга на отрезке [ a , b ] , разделив их пробелами. Если таких чисел нет, программа должна вывести число -1.
Примеры
входные данные
100 400
выходные данные
153 370 371
входные данные
500 600
выходные данные
-1

На языке PYTHON!!! Заранее спасибо!!!

Обсуждение

давно
Старший Модератор
312929
1973
04.12.2017, 05:35
общий
04.12.2017, 05:40
Адресаты:
Попробуйте вот такой вариант:
[code lang=python]def digits(n, d=[]):
return digits(n//10, [n%10]+d) if n else d or [0]
a, b = map(int, input().split())
s = []
for x in range(a,b+1):
d = digits(x)
if x==sum(map(lambda x: x**len(d), d)):
s.append(str(x))
if len(s)==0:
s.append("-1")
print(' '.join(s))[/code]
Не забывайте отступы внутри for и if - в Python это важно.
давно
Посетитель
401415
50
04.12.2017, 07:47
общий
Адресаты:
Здравствуйте, а нет ли решения этого задания с использованием более простых функций, просто многое из выше написанного я не знаю
давно
Старший Модератор
312929
1973
04.12.2017, 12:38
общий
Адресаты:
а нет ли решения этого задания с использованием более простых функций, просто многое из выше написанного я не знаю

Есть, но оно будет намного объёмнее. А какие из функций Вы не знаете?
давно
Посетитель
401415
50
04.12.2017, 12:48
общий
Адресаты:
While, for, if,list
давно
Старший Модератор
312929
1973
05.12.2017, 07:28
общий
Адресаты:
While, for, if, list

Это, строго говоря, не функции, а операторы языка. Работают они практически так же, как и в других языках (C, Java, PHP и т.п.).
Оператор if проверяет заданное в нём условие; если оно истинно, то выполняется следующие за ним (после двоеточия) операторы - до окончания соответствующего отступа. В противном случае аналогичным образом выполняются следующие операторы elif (со своими условиями), пока не встретится тот, чьё условие выполняется (или не дойдём до оператора else - его содержимое выполняется без условий).
Оператор цикла while делает то же самое, но несколько раз - повторно, пока выполняется условие.
Оператор цикла for так же выполняется несколько раз, но не в зависимости от условия, а для всех элементов какого-либо списка (словаря, строки и т.п.).
А list - это, собственно, как раз оператор создания списка.
давно
Посетитель
401415
50
05.12.2017, 07:58
общий
Адресаты:
Странно, нам всегда говорили, что это функции
давно
Старший Модератор
312929
1973
05.12.2017, 12:47
общий
Адресаты:
Странно, нам всегда говорили, что это функции

В самом широком смысле - да, но обычно используют термин "оператор" (или "синтаксическая конструкция"). А функцией (процедурой, подпрограммой - это обычно синонимы) принято называть фрагмент программы, к которому можно обратиться из других частей программы, причём неоднократно. Операторы же выполняются "на месте" (в той части программы, где они расположены) и только один раз (циклические могут и несколько раз, но при соответствующих условиях).
давно
Посетитель
401415
50
05.12.2017, 14:23
общий
Адресаты:
Спасибо, теперь буду знать
давно
Старший Модератор
312929
1973
06.12.2017, 14:52
общий
это ответ
Здравствуйте, KSIW2S!

Попробуйте вот такой вариант:
[code lang=python]def digits(n, d=[]):
return digits(n//10, [n%10]+d) if n else d or [0]
a, b = map(int, input().split())
s = []
for x in range(a,b+1):
d = digits(x)
if x==sum(map(lambda x: x**len(d), d)):
s.append(str(x))
if len(s)==0:
s.append("-1")
print(' '.join(s))[/code]
Не забывайте отступы внутри for и if - в Python это важно.
5
Форма ответа