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

Ссылка скопирована
1 ответ

Возвращает только 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
Роман IT Ответ

Проблема, когда функция возвращает только один элемент массива, может быть вызвана несколькими причинами. Давайте разберемся, как можно исправить эту проблему.

1. Неправильное использование функции: Убедитесь, что вы правильно используете функцию для создания и возврата массива. Проверьте, что у вас правильно заданы ключи и значения элементов массива.

2. Неправильное использование цикла: Если вы используете цикл для заполнения массива, убедитесь, что вы правильно добавляете элементы в массив на каждой итерации цикла. Проверьте, что у вас нет ошибок в логике цикла.

3. Некорректное использование индексов: Проверьте, что вы правильно обращаетесь к элементам массива по индексам. Убедитесь, что индексы начинаются с 0 и увеличиваются на 1 для каждого элемента массива.

Пример кода на PHP, который может помочь исправить эту проблему:

$myArray = array(); // создаем пустой массив
 
// заполняем массив с использованием цикла
for ($i = 0; $i < 5; $i++) {
    $myArray[$i] = "Элемент " . $i; // добавляем элемент в массив
}
 
// возвращаем массив
return $myArray;

$myArray = array(); // создаем пустой массив // заполняем массив с использованием цикла for ($i = 0; $i < 5; $i++) { $myArray[$i] = "Элемент " . $i; // добавляем элемент в массив } // возвращаем массив return $myArray;

Если после проверки указанных выше пунктов проблема с возвращением только одного элемента массива все еще остается, попробуйте упростить свой код и пошагово отслеживать, где именно происходит ошибка. Может быть, вы упускаете какую-то деталь или делаете неверное предположение в своем коде.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно