Python

Помогите с кодом в python

for a in range(100,1000):
if a==(a//100**3)+(a//10%10**3)+(a%10**3):
print(a,end=', ')
код по идее должен найти все трехзначные числа армстронга и вывести их.
питон выводит нечего просто пусто
Maksim Petrov
Maksim Petrov
121
У вас неправильно записаны операции вычисления кубов цифр.
В итоге вы сравниваете число с удвоенным тем же числом, такое сравнение всегда даёт ложный результат, и у вас ничего не выводится.

Операция возведения в степень в Питоне (как и в математике) имеет более высокий приоритет, чем операции умножения, деления, взятия остатка от деления. Поэтому основание степени необходимо заключать в скобки. Если в ваш код добавить только эти скобки (и отступы, без которых Питон даже не компилит его), то будет выведено 4 числа в таком формате:
 153, 370, 371, 407,  

А вот ваши скобки вокруг слагаемых не нужны, так как операции сложения и так имеют более низкий приоритет, чем операции умножения и возведения в степень.

Совет невежественного болтуна с КПД 10% можете игнорировать, на результат это не влияет. Таких здесь хватает: вон, даже VIP статус себе купил, чтобы зарабатывать больше баллов своим пустопорожним трёпом.
Конечно, красивее было бы вывести перевод строки в конце и избавиться от лишней финальной запятой, но в данном случае это - не основная проблема.

Такой код решает проблемы приоритетов и форматирования и выглядит малость короче:
 lst = [a for a in range(100, 1000) if ((a//100)**3)+((a//10%10)**3)+((a%10)**3) == a]
print(", ".join(map(str, lst)))

Можно укоротить и сам перебор. Нет смысла перебирать все 899 чисел, когда, например, сумма кубов цифр одинакова у 112, 121, 211. Есть смысл проверять только числа из таких цифр abc, где a <= b <= c. Это уменьшит количество проверок до 200 и менее.
И само возведение в куб довольно расточительно, его можно затабулировать (записать в таблицу предвычисленные степени цифр от 0 до 9 включительно).
Виктор Кутин
Виктор Кутин
54 053
Лучший ответ
Maksim Petrov заработало спасибо)
я не знал что степень в приоритете
Трехзначные числа Армстронга =>>>
 lst = []  
for i in range(1,10000):
l,d,c,summ = len(str(i)),10,1,0
for k in range(l):
summ += (i % d // c) ** l
d *= 10
c *= 10
if summ == i and len(str(i)) == 3: lst += [i]
print(*lst)
153 370 371 407
Oleg ))) Перебор 9999 чисел место 899, включая заведомо ненужные диапазоны от 1 до 100 и от 1000 до 9999.
Избыточные переводы в строку.
В 3 раза больше строк кода, чем нужно для решения задачи.

Выпускник видеокурсов по Питону?
Давайте посмотрим на ваш код. Вы используете цикл for для перебора всех трехзначных чисел от 100 до 1000. Затем вы проверяете, является ли число Армстронга и выводите его. Однако вы забыли добавить перенос строки после вывода числа. Добавьте перенос строки после вывода числа, и ваш код будет работать как надо:

for a in range(100,1000):
if a==(a//1003)+(a//10%103)+(a%10**3):
print(a,end=', ')
print() # Добавленная строка
Антон Васильев
Антон Васильев
30 348
Maksim Petrov спасибо большое
Maksim Petrov добавленная строка не помогает, что делать?
Виктор Кутин Ты бы вместо своего беспонтового VIP-статуса лучше КПД себе поднял, и так тебе бы давали больше баллов за ответ. Для этого надо вместо поверхностной чепухи, которую ты обычно мелешь, вникать в вопрос и писать ответы по делу. Твой ответ - абсолютная чушь.
for a in range(100,1000):
if a == (a//100)**3 + (a//10%10)**3 + (a%10)**3:
print(a)
Ihan Nravov
Ihan Nravov
361