Bite 301. Exchange rates
Login and get codingIn this Bite you have to provide the currency exchange rates from EUR to USD and GBP for every day in a given date range.
In the end, you can conveniently look up exchange rates for every required date. The date range is specified by the parameters
start_dateandend_dateof the functionexchange_rates. Both parameters are a string in the format "Year-Month-Day".Exchange rates data from the exchangeratesapi.io API are given as shown below:
{
"start_at": "2019-01-01",
"end_at": "2020-09-01",
"base": "EUR",
"rates": {
"2019-06-28": {
"USD": 1.138,
"GBP": 0.89655
},
"2020-05-19": {
"USD": 1.095,
"GBP": 0.89535
},
"...": {}
}
}However, this data only contains exchange rates for days on which stock exchange is open. Usually this excludes weekends and several holidays. Therefore, you have to extract this information and derive exchange rates for days that are not available in this data set.
For days where the stock exchange is closed, you have to find the date that precedes a given date when the stock exchange was open. For example, when taking the exchange rates on 2020-04-03 (Friday), the exchange rates for 2020-04-04 (Saturday) and 2020-04-05 (Sunday) are equal to the exchange rates on 2020-04-03 (Friday).
Additionaly, you have to provide the "Base Date" of the exchange rates. The "Base Date" is the date to which the exchange rates are related to originally. So for the above example the Base Dates look like the following:
Date Base Date USD GBP 2020-04-03 2020-04-03 1.0785 0.8785 2020-04-04 2020-04-03 1.0785 0.8785 2020-04-05 2020-04-03 1.0785 0.8785
To obtain all days to be considered, complete theget_all_daysfunction. This function returns a list of all days indateformat. Complete the functionmatch_daily_rateswhich returns a match between a given day and an entry in the original dataset.The
exchange_ratesfunction should return the exchange rates for every day in the date range as shown below:result = {
date(2020, 4, 5): {
"Base Date": date(2020, 4, 3),
"USD": 1.0785,
"GBP": 0.8785,
}
}Finally two additional requirements:
- Create the result in such a way that it is (chronologically) ordered according to the date keys. You may want to take a look at Python 3.7 changes or at the
collectionsmodule.- Check if the given
start_dateandend_dateforexchange_ratesare compatible to the provided dataset. If either thestart_datelies before start of the dataset range orend_datelies after the end of the dataset range throw aValueErrorand inform the user of the particular problem.Good luck and keep calm and code in Python!
39 out of 45 users completed this Bite.
Will you be the 40th person to crack this Bite?
Resolution time: ~68 min. (avg. submissions of 5-240 min.)
Our community rates this Bite 6.33 on a 1-10 difficulty scale.
» Up for a challenge? 💪