Найти - Пользователи
Полная версия: HELP! Почему не работает код?
Начало » Центр помощи » HELP! Почему не работает код?
1 2
olly_wonka
Добрый вечер, друзья!
Подскажите, пжлста, почему не работает код?
Огромное спасибо заранее!

 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)
xam1816
[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


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

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

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

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

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

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


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

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

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

программа должна выдавать отличный от моего результат, не нули
никак не могу понять, что не так
doza_and
Задачу лучше разбивать на простые куски которые вы можете легко проверить. И их следует проверять.
Код желательно делать более общим чем вам надо. Может пригодиться.
  
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)))
Ваш код нет смысла править. Он написан в неподдерживаемом стиле. Идут повторения кода которые надо править многократно. Его надо полностью переписывать.

xam1816
 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() уже безнадежно устарел?.
xam1816
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 назад, я же написал в коде здесь
olly_wonka
xam1816

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

py.user.next
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() пишет, которую во втором питоне нельзя использовать, из-за того что она там тяжёлый список возвращает.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB