Pomoc Python - pętla

0

Cześć, potrzebuje pomocy: robię kantor walutowy i pobieram kursy z NBP:

    def Pobieranie_kursow(self):
        data = self.dataEdt.text()
        try:
            url = urllib.request.urlopen('http://api.nbp.pl/api/exchangerates/rates/a/EUR/'+data)
            soup = BeautifulSoup(url, 'html.parser')
            self.EURkurs = ast.literal_eval(str(soup))['rates'][0]['mid']
            url = urllib.request.urlopen('http://api.nbp.pl/api/exchangerates/rates/a/USD/'+data)
            soup = BeautifulSoup(url, 'html.parser')
            self.USDkurs = ast.literal_eval(str(soup))['rates'][0]['mid']
            url = urllib.request.urlopen('http://api.nbp.pl/api/exchangerates/rates/a/CHF/'+data)
            soup = BeautifulSoup(url, 'html.parser')
            self.CHFkurs = ast.literal_eval(str(soup))['rates'][0]['mid']
            url = urllib.request.urlopen('http://api.nbp.pl/api/exchangerates/rates/a/GBP/'+data)
            soup = BeautifulSoup(url, 'html.parser')

I pytanko jak to można zapisać w pętli bo jeszcze mam zamiar więcej walut dać

oraz
jak coś takiego zrobić w pętli : chodzi o przeliczanie waluty z PLN na różne waluty

if self.combo1.currentText() == "PLN":
                if self.combo2.currentText() == "EUR":
                    kurs = round(1 / self.EURkurs, 4)
                    wynik = round(kwota * kurs, 2)
                elif self.combo2.currentText() == "USD":
                    kurs = round(1 / self.USDkurs, 4)
                    wynik = round(kwota * kurs, 2)
                elif self.combo2.currentText() == "CHF":
                    kurs = round(1 / self.CHFkurs, 4)
                    wynik = round(kwota * kurs, 2)
                elif self.combo2.currentText() == "GBP":
                    kurs = round(1 / self.GBPkurs, 4)
                    wynik = round(kwota * kurs, 2)
self.kursEdt.setText(str(kurs))
self.wynikEdt.setText(str(wynik))
1

Zbierasz wszystkie kursy jakie chcesz dodać w jakiejś kolekcji, a potem przechodzisz przez tą tablicę po każdej walucie.

1
NeutrinoSpinZero napisał(a):

Zbierasz wszystkie kursy jakie chcesz dodać w jakiejś kolekcji, a potem przechodzisz przez tą tablicę po każdej walucie.

W slowniku

1

Np.:

currencies = {'EUR': -1, 'USD': -1, 'CHF', 'GBP': -1}

Ewentualnie z API NBP możesz pobrać całą tabelę i sparsować ją w programie (nie trzeba pojedyńczo dla każdej waluty).

I teraz możesz ziterować swój słownik i zaktualizować kurs:

def get_currency_rate(currency, data):
     url = urllib.request.urlopen('http://api.nbp.pl/api/exchangerates/rates/a/{}/{}'.format(currency, data))
     soup = BeautifulSoup(url, 'html.parser')
     return ast.literal_eval(str(soup))['rates'][0]['mid']

data = self.dataEdt.text()
for currency in currencies:
    currencies[currency] = get_currency_rate(currency, data)

Pewnie wartości z API da się lepiej sparsować.

Co do drugiej części to mając już powyższy słownik możesz:

rate = currencies[self.combo1.currentText()]
result = round(rate * amount, 2)

Round może niewłaściwie zaookrąglać dla pieniędzy

1 użytkowników online, w tym zalogowanych: 0, gości: 1