#ruby
Вопрос:
Я пытаюсь создать конвертер валют в Ruby, который рассчитает обменный курс между двумя валютами на определенную дату.
У меня есть файл данных, содержащий тестовые данные (дата, валюта от, валюта до). Данные теста указаны в евро, поэтому все курсы конвертируются в евро, а затем в целевую валюту.
На данный момент у меня есть 3 файла ( Exchange.rb
, Test_Exchange.rb
, rates.json
):
Exchange.rb
:
require 'json'
require 'date'
module Exchange
# Return the exchange rate between from_currency and to_currency on date as a float.
# Raises an exception if unable to calculate requested rate.
# Raises an exception if there is no rate for the date provided.
@rates = JSON.parse(File.read('rates.json'))
def self.rate(date, from_currency, to_currency)
# TODO: calculate and return rate
rates = u/rates[date] # get rates of given day
from_to_eur = 1.0 / rates[from_currency] # convert to EUR
from_to_eur * rates[to_currency] # convert to target currency
end
end
Test_Exchange.rb
:
require_relative 'Exchange.rb'
require 'date'
target_date = Date.new(2018,12,10).to_s
puts "USD to GBP: #{Exchange.rate(target_date, 'USD', 'GBP')}"
puts "USD to JPY: #{Exchange.rate(target_date, 'PLN', 'CHF')}"
puts "DKK to CAD: #{Exchange.rate(target_date, 'PLN', 'CHF')}"
rates.json
:
{
"2018-12-11": {
"USD": 1.1379,
"JPY": 128.75,
"BGN": 1.9558,
"CZK": 25.845,
"DKK": 7.4641,
"GBP": 0.90228,
"HUF": 323.4,
"CHF": 1.1248,
"PLN": 4.2983
},
"2018-12-10": {
"USD": 1.1425,
"JPY": 128.79,
"BGN": 1.9558,
"CZK": 25.866,
"DKK": 7.4639,
"CAD": 1.5218,
"GBP": 0.90245,
"HUF": 323.15,
"PLN": 4.2921,
"CHF": 1.1295,
"ISK": 140.0,
"HRK": 7.387,
"RUB": 75.8985
},
"2018-12-05": {
"USD": 1.1354,
"JPY": 128.31,
"BGN": 1.9558,
"CZK": 25.886,
"DKK": 7.463,
"GBP": 0.88885,
"HUF": 323.49,
"PLN": 4.2826,
"RON": 4.6528,
"SEK": 10.1753,
"CHF": 1.1328,
"HRK": 7.399,
"RUB": 75.8385,
"CAD": 1.5076
}
}
I’m not sure what to add in the Exchange.rb file to allow the user to input a date and the two currencies to compare exchange rates.
Running Exchange.rb
does nothing. I’m guessing it wants a date and currency parameters input?
Running Test_Exchange.rb
works because the date and currencies are bootstrapped in.
I found almost the same question posted here a couple years ago, but the thread is now closed, and the solution was incomplete. Hoping someone can help me!
ЗАПУСК РЕДАКТИРОВАНИЯ:
Exchange.rb
:
require 'json'
require 'date'
module Exchange
# Return the exchange rate between from_currency and to_currency on date as a float.
# Raises an exception if unable to calculate requested rate.
# Raises an exception if there is no rate for the date provided.
@rates = JSON.parse(File.read('rates.json'))
#Grab Date and Currencies from User
puts "Please enter a Date (YYYY-MM-DD)"
input_date = gets.chomp
puts "The Date you entered is: #{input_date}"
puts "Please enter a 3-letter Currency Code (ABC):"
input_curr_1 = gets.chomp
puts "The 1st Currency you entered is: #{input_curr_1}"
puts "Please enter a 2nd 3-letter Currency Code (XYZ):"
input_curr_2 = gets.chomp
puts "The 2nd Currency you entered is: #{input_curr_2}"
def self.rate(input_date, input_curr_1, input_curr_2)
# TODO: calculate and return rate
rates = @rates[input_date] # get rates of given day
from_to_eur = 1.0 / rates[input_curr_1] # convert to EUR
from_to_eur * rates[input_curr_2] # convert to target currency
end
end
Я думаю, что мне нужно использовать put и get, чтобы захватить ввод даты пользователя? Тогда то же самое для каждой из двух валют? Конечно, мой синтаксис для обозначения даты совершенно неправильный..
Поэтому мне удалось использовать функции get и put. Теперь все, что осталось, — это каким — то образом назвать цены.файл json и сравнение входных данных пользователя с существующими данными..
Комментарии:
1. Добро пожаловать в Stack Overflow. Что произошло, когда вы ввели
ruby get user input
данные в поисковую систему?2. «Я предполагаю, что он хочет ввести параметры даты и валюты?» Все, что он делает, это определяет функцию; вам нужно получить входные данные, вызвать функцию, используя эти входные данные, и отобразить результат .
Test_Exchange.rb
Показаны примеры последних двух шагов с использованием жестко закодированного ввода.3. «Я думаю, что мне нужно использовать put и get, чтобы зафиксировать ввод даты пользователем?» — Вам нужно использовать
gets
. rubyguides.com/2019/10/ruby-chomp-gets4. поэтому мне нужно определить переменную даты как gets.chomp? Затем ставки. json необходимо проанализировать, чтобы убедиться, что дата ввода пользователем существует? Спасибо за комментарии!