问题是,您需要获取商品的所有价格,将它们相加并除以它们的数量(找出平均价格)。我不知道如何将数字带到int(就像我一样,但我不确定它是否正确)并将它们加在一起。
from bs4 import BeautifulSoup
price_html = """
<table cellspacing="0" cellpadding="0" border="1">
<tbody>
<tr class="even_row">
<th><p>№ п/п</p></th>
<th class="armor"><p>Название</p></th>
<th class="price"><p>Цена</p><p>рублей</p></th>
</tr>
<tr class="odd_row">
<td><p>1.</p></td>
<td class="armor"><p>Щит</p></td>
<td class="price"><p>375</p></td>
</tr>
<tr class="even_row">
<td><p>2.</p></td>
<td class="armor"><p>Шлем</p></td>
<td class="price"><p>297</p></td>
</tr>
<tr class="odd_row">
<td><p>3.</p></td>
<td class="armor"><p>Кольчуга</p></td>
<td class="price"><p>565</p></td>
</tr>
<tr class="even_row">
<td><p>4.</p></td>
<td class="armor"><p>Булава</p></td>
<td class="price"><p>1992</p></td>
</tr>
<!-- Сюда может добавиться неизвестное количество элементов экипировки.
Их тоже нужно учитывать при расчёте средней цены. -->
</tbody>
</table>
"""
soup = BeautifulSoup(price_html, 'lxml')
result = soup.find_all('td', attrs={'class': 'price'})
length = len(result)
y = []
y = list(map(int, y))
for i in result:
y.append(i.text)
# print(result)
# print('Средняя цена богатырских доспехов: ', result, 'рублей')
找到了这个解决方案:
熟悉的“Hammer Error”(“XY 错误”,XY 问题):
您不想添加元素,您想要它们的平均值。
您可以
mean()从标准模块应用功能statistics:或更具描述性但不太推荐
在您的代码中,您需要稍微更改这 3 个命令的顺序
在
以便仅在列表完全填满后
int执行类型转换。然后:
笔记:
对于 Python 3.6+,最好使用f-string:
它更漂亮,结果将始终以 2 位小数显示(正确四舍五入)。