Почему функция возвращает только один элемент массива?
Возвращает только 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()) |
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)) |
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))
Дополнительно:
Потому что выражение return прерывает функцию. То есть у тебя происходит только одна итерация цикла, и затем выход из функции. Собери itemPrice[0] в список объявленный вне цикла (result.append(itemPrice[0])) и верни result вне цикла. Имей ввиду то что ты в своей имплементации объявил itemPrice вне цикла и это имеет 0 эффекта, так как при каждой итерации у тебя создается новый объект, например вот здесь itemPrice = i.find(...
- Спасибо огромное!
Ну так все правильно, return возвращает первый itemPrice[0] (функция возвращает ответ один раз а не как вы хотите много раз в цикле) и закрывает функцию article.
Хотите возвращать массив, так формируйте вначале массив а в конце возвращайте его.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Проблема, когда функция возвращает только один элемент массива, может быть вызвана несколькими причинами. Давайте разберемся, как можно исправить эту проблему.
1. Неправильное использование функции: Убедитесь, что вы правильно используете функцию для создания и возврата массива. Проверьте, что у вас правильно заданы ключи и значения элементов массива.
2. Неправильное использование цикла: Если вы используете цикл для заполнения массива, убедитесь, что вы правильно добавляете элементы в массив на каждой итерации цикла. Проверьте, что у вас нет ошибок в логике цикла.
3. Некорректное использование индексов: Проверьте, что вы правильно обращаетесь к элементам массива по индексам. Убедитесь, что индексы начинаются с 0 и увеличиваются на 1 для каждого элемента массива.
Пример кода на PHP, который может помочь исправить эту проблему:
$myArray = array(); // создаем пустой массив // заполняем массив с использованием цикла for ($i = 0; $i < 5; $i++) { $myArray[$i] = "Элемент " . $i; // добавляем элемент в массив } // возвращаем массив return $myArray;
Если после проверки указанных выше пунктов проблема с возвращением только одного элемента массива все еще остается, попробуйте упростить свой код и пошагово отслеживать, где именно происходит ошибка. Может быть, вы упускаете какую-то деталь или делаете неверное предположение в своем коде.