Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 22, 2022 16:30:04

olly_wonka
Зарегистрирован: 2022-01-22
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

Добрый вечер, друзья!
Подскажите, пжлста, почему не работает код?
Огромное спасибо заранее!

 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)

Прикреплённый файлы:
attachment Снимок экрана (6).png (106,7 KБ)

Офлайн

#2 Янв. 22, 2022 21:21:28

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1308
Репутация: +  112  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

[code python]сюда вставлять код, чтобы правильно отображался[/code]
#
Вот здесь хрень какая-то в кубе
 for num in range(len(my_list)):
my_list = my_list ** 3
#
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


Офлайн

#3 Янв. 22, 2022 23:17:45

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

Позвольте пару советов дам.

Когда вы говорите что код не работает, это означает что он дает не то что вы ожидали.
Надо в посте приводить код, что получили и что хотели получить.

Пока с моей точки зрения все отлично работает. Код выполняется без ошибок, дает нули. может вы этого и хотели.

Складывается впечатление что вы не совсем понимаете что такое функции. две ваши функции делают одно и тоже или очень похожие вещи. в этом случае достаточно одной функции. внутренние переменные в функции доступны только внутри функции и не будут перемешиваться.



Офлайн

#4 Янв. 23, 2022 09:17:54

olly_wonka
Зарегистрирован: 2022-01-22
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

xam1816

благодарю великодушно))

извините, не поняла про return
куда его нужно сдвинуть?

Офлайн

#5 Янв. 23, 2022 09:30:40

olly_wonka
Зарегистрирован: 2022-01-22
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

doza_and
Позвольте пару советов дам.Когда вы говорите что код не работает, это означает что он дает не то что вы ожидали.Надо в посте приводить код, что получили и что хотели получить.Пока с моей точки зрения все отлично работает. Код выполняется без ошибок, дает нули. может вы этого и хотели.Складывается впечатление что вы не совсем понимаете что такое функции. две ваши функции делают одно и тоже или очень похожие вещи. в этом случае достаточно одной функции. внутренние переменные в функции доступны только внутри функции и не будут перемешиваться.


спасибо за обратную связь!

приношу свои извинения за отсутствие описания задачи))
наивно понадеялась на возможную синтаксическую ошибку из-за отсутствия должного опыта

1. в первой функции должно быть вычисление суммы тех чисел списка, сумма цифр которых кратно 7
2. во второй функции к каждому элементу списка добавляется 17, и происходит вычисление аналогичное первому пункту задачи
3. создается список кубов нечетных чисел от 1 до 1000

программа должна выдавать отличный от моего результат, не нули
никак не могу понять, что не так

Отредактировано olly_wonka (Янв. 23, 2022 09:32:14)

Офлайн

#6 Янв. 23, 2022 10:35:02

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

Задачу лучше разбивать на простые куски которые вы можете легко проверить. И их следует проверять.
Код желательно делать более общим чем вам надо. Может пригодиться.

  
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)

Офлайн

#7 Янв. 23, 2022 22:54:59

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1308
Репутация: +  112  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

 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)

вопрос❓ у filter() есть какие-нибудь преимущества, перед генератором? Или filter() уже безнадежно устарел?.

Офлайн

#8 Янв. 23, 2022 23:09:45

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1308
Репутация: +  112  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

olly_wonka
извините, не поняла про return
куда его нужно сдвинуть?
у вас в функции return вернет sum_1 после первой итерации цикла for
  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

Нужно tab назад, я же написал в коде здесь

Офлайн

#9 Янв. 24, 2022 13:57:32

olly_wonka
Зарегистрирован: 2022-01-22
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

xam1816

огромное спасибо!

Офлайн

#10 Янв. 24, 2022 21:07:30

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

HELP! Почему не работает код?

xam1816
у filter() есть какие-нибудь преимущества, перед генератором? Или filter() уже безнадежно устарел?
Да не устаревала она никогда. Была только версия функции filter() во втором питоне, которая возвращала список, что тратило память и время. Эта функция filter() во втором питоне и устарела. А так, это обычная функция из функциональной парадигмы, которая обычно есть во всех функциональных языках. Очень странно, если её нет в них под тем или иным именем.
Если ты пишешь во втором питоне, то не используй функцию filter(). Используй либо генератор, которые есть во втором питоне, либо используй функцию itertools.ifilter(), которая есть во втором питоне.
Но второй питон вот как раз и устарел. Но есть ещё организации, где пишут на втором питоне, потому что переписывать на третий питон внутренние проекты организации дорого. Вот на каком-то таком проекте некоторые ребята и сидят, а потом ещё и путают положение в питоне вообще с положением в питоне в своей конкретной организации. Так что не слушай эту ахинею. Читай книги и официальную документацию. Всё, что ты найдёшь неформальное, скорее всего, окажется вот такими возгласами ребят, сидящих в снгшных проектах, которые до сих пор лопухом подтираются и не знают про мировые международные тренды, так как английский - очень сложный язык и на нём очень сложно читать новую информацию.

xam1816
у filter() есть какие-нибудь преимущества, перед генератором?
Конечно есть, функция filter() чиитаемее любого генератора.
Выполни
  
import this
и перечитай то, что там написано.

Вот пара вызовов функции filter() в одном операторе
  
>>> filter(lambda i: 1 < i < 5, map(int, filter(str.isdigit, '123abcdef456')))
<filter object at 0x7f0a26b667f0>
>>> list(_)
[2, 3, 4]
>>>
Попробуй, перепиши это на генераторы, как того требует второй питон в снгшной конторке, где подорожником жопу подтирают, не зная про туалетную бумагу, - сразу поймёшь в чём бред заключается.

P. S.
Эту хрень, что во втором питоне надо то, во втором питоне надо это, я от него уже слыхал. Да, во втором питоне надо, только вот кому он упал, этот второй питон. Когда он писал впервые про это, второй питон только готовили к консервации. Сейчас же он официально законсервирован и превращён в легаси. А этот всё не унимается. Всё уже в труху превратилось давным давно, четвёртый питон уже на подходе, а он до сих пор про функцию filter() пишет, которую во втором питоне нельзя использовать, из-за того что она там тяжёлый список возвращает.



Отредактировано py.user.next (Янв. 24, 2022 21:35:48)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version