Есть задача на питоне, которую мне дали, я не могу ее решить
Задача такова: Создать список, состоящий из кубов нечётных чисел от 0 до 1000: Вычислить сумму тех чисел из этого списка, сумма цифр которых делится нацело на 7.
Например, число 19 ^ 3 = 6859 будем включать в сумму,
так как 6 + 8 + 5 + 9 = 28 – делится нацело на 7. Внимание: использовать только арифметические операции!
К каждому элементу списка добавить 17 и заново вычислить сумму тех чисел из этого списка, сумма цифр которых делится нацело на 7. Внимание: новый список не создавать!!!
Проблема в том, что ответ должен быть таким: 17485588610, 15392909930.
Но у меня получается совсем другое. мой код такой:
list_for_home_work = []
for i in range(1001):
list_for_home_work.append(i)
for num in list_for_home_work:
if num % 2 == 0:
list_for_home_work.pop()
for i in range(len(list_for_home_work)):
list_for_home_work[i] = list_for_home_work[i] ** 3
sum = 0
temporary_num = 0
exit_num = 0
for num_1 in list_for_home_work:
temporary_list = list(str(num_1))
print(temporary_list)
for val_2 in temporary_list:
temporary_num += int(val_2)
print()
if temporary_num % 7 == 0:
sum += temporary_num
exit_num += sum
# Дальше добавляем 17
for i in range(len(list_for_home_work)):
list_for_home_work[i] += 17
sum = 0
temporary_num = 0
exit_num = 0
for num in list_for_home_work:
temporary_list = list(str(num))
for val_2 in temporary_list:
temporary_num += int(val_2)
if temporary_num % 7 == 0:
sum += temporary_num
exit_num += sum
Я серьезно пятый час сижу над задачей, помогите пожалуйста.
Ответы (1 шт):
да вы просто наусложнялись выше крыше
Создать список, состоящий из кубов нечётных чисел от 0 до 1000
не надо ничего удалять - просто идите с шагом в 1 начиная с 1
arr = [i**3 for i in range(1, 1001, 2)]
Вычислить сумму тех чисел из этого списка, сумма цифр которых делится нацело на 7
способов решить это много, но самый короткий (Хотя и не самый быстрый - через строки)
превратить число в строку через
str()превратить строку в массив цифр
преобразовать цифры в числа
подсчитать сумму
sum(map(int, str(value))
и все
P.S.
на счет использования строк я погорячился - ведь в задаче написано "только арифметическими действиями", поэтому вот такой код у меня получился:
def sum_digits(value):
res = 0
while value != 0:
res += value % 10
value //= 10
return res
arr = [i**3 for i in range(1, 1001, 2)]
res1 = sum(filter(lambda num: sum_digits(num) % 7 == 0, arr))
res2 = sum(filter(lambda num: sum_digits(num + 17) % 7 == 0, arr))
print(res1)
print(res2)
P.P.S.
если же не сковываться некоторыми условиями задачи, то все ее решение можно записать так:
print(sum(filter(lambda j: sum(map(int, str(j))) % 7 == 0, [i**3 for i in range(1, 1001, 2)])))
print(sum(filter(lambda j: sum(map(int, str(j + 17))) % 7 == 0, [i**3 for i in range(1, 1001, 2)])))