РУБИН — Калькулятор Обменного Курса Валют

#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-gets

4. поэтому мне нужно определить переменную даты как gets.chomp? Затем ставки. json необходимо проанализировать, чтобы убедиться, что дата ввода пользователем существует? Спасибо за комментарии!