for a in range(100,1000):
if a==(a//100**3)+(a//10%10**3)+(a%10**3):
print(a,end=', ')
код по идее должен найти все трехзначные числа армстронга и вывести их.
питон выводит нечего просто пусто
Python
Помогите с кодом в python
У вас неправильно записаны операции вычисления кубов цифр.
В итоге вы сравниваете число с удвоенным тем же числом, такое сравнение всегда даёт ложный результат, и у вас ничего не выводится.
Операция возведения в степень в Питоне (как и в математике) имеет более высокий приоритет, чем операции умножения, деления, взятия остатка от деления. Поэтому основание степени необходимо заключать в скобки. Если в ваш код добавить только эти скобки (и отступы, без которых Питон даже не компилит его), то будет выведено 4 числа в таком формате:
А вот ваши скобки вокруг слагаемых не нужны, так как операции сложения и так имеют более низкий приоритет, чем операции умножения и возведения в степень.
Совет невежественного болтуна с КПД 10% можете игнорировать, на результат это не влияет. Таких здесь хватает: вон, даже VIP статус себе купил, чтобы зарабатывать больше баллов своим пустопорожним трёпом.
Конечно, красивее было бы вывести перевод строки в конце и избавиться от лишней финальной запятой, но в данном случае это - не основная проблема.
Такой код решает проблемы приоритетов и форматирования и выглядит малость короче:
Можно укоротить и сам перебор. Нет смысла перебирать все 899 чисел, когда, например, сумма кубов цифр одинакова у 112, 121, 211. Есть смысл проверять только числа из таких цифр abc, где a <= b <= c. Это уменьшит количество проверок до 200 и менее.
И само возведение в куб довольно расточительно, его можно затабулировать (записать в таблицу предвычисленные степени цифр от 0 до 9 включительно).
В итоге вы сравниваете число с удвоенным тем же числом, такое сравнение всегда даёт ложный результат, и у вас ничего не выводится.
Операция возведения в степень в Питоне (как и в математике) имеет более высокий приоритет, чем операции умножения, деления, взятия остатка от деления. Поэтому основание степени необходимо заключать в скобки. Если в ваш код добавить только эти скобки (и отступы, без которых Питон даже не компилит его), то будет выведено 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 включительно).
Трехзначные числа Армстронга =>>>
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 раза больше строк кода, чем нужно для решения задачи.
Выпускник видеокурсов по Питону?
Избыточные переводы в строку.
В 3 раза больше строк кода, чем нужно для решения задачи.
Выпускник видеокурсов по Питону?
Давайте посмотрим на ваш код. Вы используете цикл for для перебора всех трехзначных чисел от 100 до 1000. Затем вы проверяете, является ли число Армстронга и выводите его. Однако вы забыли добавить перенос строки после вывода числа. Добавьте перенос строки после вывода числа, и ваш код будет работать как надо:
for a in range(100,1000):
if a==(a//1003)+(a//10%103)+(a%10**3):
print(a,end=', ')
print() # Добавленная строка
for a in range(100,1000):
if a==(a//1003)+(a//10%103)+(a%10**3):
print(a,end=', ')
print() # Добавленная строка
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)
if a == (a//100)**3 + (a//10%10)**3 + (a%10)**3:
print(a)
Похожие вопросы
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Помогите написать код в python
- Помогите написать Код в Python
- Помогите написать код на python, пожалуйста.
- Помогите написать код на python(только без def)
- Помогите написать программу на Python, моя версия кода на скрине, вроде всё работает, но автопроверка не проходит.
- Помогите решить задачу на Python. Никак не могу решить задачу, больше дня не могу найти ответ! Никакой код не работает.
- Можно ли создать свой редактор кода на PYTHON?
- Язык Python, помочь с кодом (не много)
- Проблема с кодом в Python
я не знал что степень в приоритете