Как я могу получить среднее значение из этих выходных данных и конвертировать валюту в евро, как и все остальные, если любое из чисел составляет фунт sh фунт? - PullRequest
0 голосов
/ 18 февраля 2020

Я пробовал много способов, но всегда получаю ошибки. Я просто хочу перевести фунты в евро, исключить, если результатом будет какое-либо из следующего: 123, 1234, 12345, и в итоге получим 1 вывод; среднее из всех чисел.

import requests
import re
from currency_converter import CurrencyConverter
c = CurrencyConverter()
from bs4 import BeautifulSoup

url = "https://www.donedeal.ie/cars/Ford/C-MAX"

response = requests.get(url, headers=headers)

soup = BeautifulSoup(response.text, 'html.parser')

for price in soup.findAll('p', attrs={'class': 'card__price'}):
    price = price.text

Вывод этого пока выглядит следующим образом:

€1,350
€17,950
€650
... (and so on)

теперь для конвертации валюты ..

    pound_price= re.compile(r'£+\d[0-9,.]+')
    if pound_price.findall(price):
        converted=price[0]#.replace('£','')
        converted=c.convert(price[0], 'GBP', 'EUR')
        print(converted)

Он не возвращает никакого вывода, и эта ошибка:

Traceback (most recent call last):
  File "xx", line 32, in <module>
    converted=c.convert(price[0], 'GBP', 'EUR')
  File "..\AppData\Local\Programs\Python\Python36\lib\site-packages\currency_converter\currency_converter.py", line 358, in convert
    return self.cast(amount) / r0 * r1
ValueError: could not convert string to float: '£'
    price_only = re.compile(r'\d[0-9,.]+')
    just_price = price_only.findall(price)

    integer_price = [int(''.join(s[0:].split(','))) for s in just_price]

    def cal_average(num):
        sum_num=0
        for t in (num):
            sum_num= sum_num + t
        avg= sum_num / len(num)
        return avg

    print(int(cal_average(integer_price)))

Вывод выглядит так:

1350
17950
650
19950
24368
Traceback (most recent call last):
  File "xx", line 60, in <module>
    print(int(cal_average(integer_price)))
  File "xx", line 57, in cal_average
    avg= sum_num / len(num)
ZeroDivisionError: division by zero
15950
7250
7500
5250
113
14500
314
13450
999

Process finished with exit code 1
...