@Speakermen

Почему функция возвращает только один элемент массива?

Возвращает только 6399 если заменить return на print всё норм от [6399 ,... ,15999](
from bs4 import BeautifulSoup


def extract_data_from_report(filename):
    soup = BeautifulSoup(open(filename, mode="r", encoding="utf-8"), "lxml")
    return soup


def article():
    items = extract_data_from_report('pro.html').find_all(
        'div', class_='catalog-product')
    itemPrice = []

    for n, i in enumerate(items, start=1):
        itemName = i.find(
            'a', class_='catalog-product__name').text.lstrip("Материнская плата").partition('[')[0]

        if i.find(class_="product-buy__prev") is not None:
            itemPrice = i.find(
                'div', class_="product-buy__price_active").text.replace(' ', '').replace('₽', '').split()
        else:
            itemPrice = i.find(
                class_="product-buy__price").text.replace("₽", "").replace(' ', '').split()
            itemPrice.append(None)

        # print(f'{n}:  {itemPrice[0]}₽ за {itemName}')
        return itemPrice[0]


if __name__ == '__main__':
    print(article())


Должно быть(

arr = [6399,
       6799,
       6899,
       6999,
       7199,
       7499,
       7599,
       7699,
       7799,
       8399,
       8499,
       8499,
       8499,
       9399,
       9999,
       10799,
       11199,
       11499,
       12399,
       12499,
       12899,
       14499,
       15299,
       15999]

print(min(arr))
print(sum(arr) / len(arr))
print(max(arr))
  • Вопрос задан
  • 82 просмотра
Решения вопроса 2
Maksim_64
@Maksim_64
Data Analyst
Потому что выражение return прерывает функцию. То есть у тебя происходит только одна итерация цикла, и затем выход из функции. Собери itemPrice[0] в список объявленный вне цикла (result.append(itemPrice[0])) и верни result вне цикла. Имей ввиду то что ты в своей имплементации объявил itemPrice вне цикла и это имеет 0 эффекта, так как при каждой итерации у тебя создается новый объект, например вот здесь itemPrice = i.find(...
Ответ написан
Rimush
@Rimush
Ну так все правильно, return возвращает первый itemPrice[0] (функция возвращает ответ один раз а не как вы хотите много раз в цикле) и закрывает функцию article.
Хотите возвращать массив, так формируйте вначале массив а в конце возвращайте его.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы