Форум сайта python.su
Добрый вечер, друзья!
Подскажите, пжлста, почему не работает код?
Огромное спасибо заранее!
def sum_list_1(dataset: list) -> int: sum_1 = 0 for num in dataset: sum_digits = 0 numbs = num while (num != 0): sum_digits = sum_digits + num % 10 num //= 10 if sum_digits % 7 == 0: sum_1 += numbs return sum_1 def sum_list_2(dataset: list) -> int: sum_2 = 0 for num in dataset: num += 17 sum_digits = 0 numbs = num while (num != 0): sum_digits += num % 10 num = num // 10 if sum_digits % 7 == 0: sum_2 += numbs return sum_2 my_list = list(range(1, 1000, 2)) for num in range(len(my_list)): my_list[num] = my_list[num] ** 3 result_1 = sum_list_1(my_list) print(result_1) result_2 = sum_list_2(my_list) print(result_2)
Отредактировано olly_wonka (Янв. 23, 2022 09:16:44)
Прикреплённый файлы:
Снимок экрана (6).png (106,7 KБ)
Офлайн
[code python]сюда вставлять код, чтобы правильно отображался[/code]
for num in range(len(my_list)): my_list = my_list ** 3
def sum_list_1(dataset: list) -> int: sum_1 = 0 for num in dataset: sum_digits = 0 numbs = num while (num != 0): sum_digits = sum_digits + num % 10 num //= 10 if sum_digits % 7 == 0: sum_1 += numbs return sum_1
Офлайн
Позвольте пару советов дам.
Когда вы говорите что код не работает, это означает что он дает не то что вы ожидали.
Надо в посте приводить код, что получили и что хотели получить.
Пока с моей точки зрения все отлично работает. Код выполняется без ошибок, дает нули. может вы этого и хотели.
Складывается впечатление что вы не совсем понимаете что такое функции. две ваши функции делают одно и тоже или очень похожие вещи. в этом случае достаточно одной функции. внутренние переменные в функции доступны только внутри функции и не будут перемешиваться.
Офлайн
xam1816
Офлайн
doza_and
Позвольте пару советов дам.Когда вы говорите что код не работает, это означает что он дает не то что вы ожидали.Надо в посте приводить код, что получили и что хотели получить.Пока с моей точки зрения все отлично работает. Код выполняется без ошибок, дает нули. может вы этого и хотели.Складывается впечатление что вы не совсем понимаете что такое функции. две ваши функции делают одно и тоже или очень похожие вещи. в этом случае достаточно одной функции. внутренние переменные в функции доступны только внутри функции и не будут перемешиваться.
Отредактировано olly_wonka (Янв. 23, 2022 09:32:14)
Офлайн
Задачу лучше разбивать на простые куски которые вы можете легко проверить. И их следует проверять.
Код желательно делать более общим чем вам надо. Может пригодиться.
def sum_digits(i:int)->int: return sum(map(int,str(i))) def test_sum_digits(): assert(sum_digits(12)==3) def sumof(li,n=7): return sum([i for i in li if sum_digits(i)%n==0]) def test_sumof(): assert(sumof([7,34,1])==7+34) print(sumof(range(1,1000,2))) print(sumof(range(1+7,1000+7,2)))
Отредактировано doza_and (Янв. 23, 2022 10:41:38)
Офлайн
my_list = list(range(1, 1000, 2)) # def sum_digits_of_num(num: int): res = 0 while num: res += num % 10 num //= 10 return res # # # filter_lst = lambda lst: filter(lambda i: sum_digits_of_num(i) % 7 == 0, lst) filter_lst = lambda lst: (i for i in lst if sum_digits_of_num(i) % 7 == 0) # sum_1 = sum(filter_lst(my_list)) print(sum_1) # items_add_17_gen = lambda lst: (i + 17 for i in lst) # sum_2 = sum(filter_lst(items_add_17_gen(my_list))) print(sum_2) # filter_odd_nums = lambda lst: filter(lambda i: i % 2 != 0, lst) #filter_odd_nums = lambda lst: (i for i in lst if i % 2 != 0) # nums_cubed_lst = [i**3 for i in filter_odd_nums(my_list)] print(nums_cubed_lst)
Офлайн
olly_wonkaу вас в функции return вернет sum_1 после первой итерации цикла for
извините, не поняла про return
куда его нужно сдвинуть?
def sum_list_1(dataset: list) -> int: sum_1 = 0 for num in dataset: sum_digits = 0 numbs = num while (num != 0): sum_digits = sum_digits + num % 10 num //= 10 if sum_digits % 7 == 0: sum_1 += numbs return sum_1
Офлайн
xam1816
Офлайн
xam1816Да не устаревала она никогда. Была только версия функции filter() во втором питоне, которая возвращала список, что тратило память и время. Эта функция filter() во втором питоне и устарела. А так, это обычная функция из функциональной парадигмы, которая обычно есть во всех функциональных языках. Очень странно, если её нет в них под тем или иным именем.
у filter() есть какие-нибудь преимущества, перед генератором? Или filter() уже безнадежно устарел?
xam1816Конечно есть, функция filter() чиитаемее любого генератора.
у filter() есть какие-нибудь преимущества, перед генератором?
import this
>>> filter(lambda i: 1 < i < 5, map(int, filter(str.isdigit, '123abcdef456'))) <filter object at 0x7f0a26b667f0> >>> list(_) [2, 3, 4] >>>
Отредактировано py.user.next (Янв. 24, 2022 21:35:48)
Офлайн