Ошибка программирования Ruby (неопределенная локальная переменная)

Пытался сделать калькулятор оплаты кредитной картой. Вот весь код:

m_counter = 0

def calc_payment
  payment_percentage = payment / balance * 100
  monthly_apr = apr / 12
  while balance > 0
   m_counter = m_counter + 1
   balance = balance / 100 * monthly_apr
   balance = balance - payment
  end
  puts
  puts "Monthly payment: $" + payment
  puts "Balance payoff: " + m_counter + " months" 
end

puts "Welcome to your credit card payment calculator!"
puts

puts "Please tell me your credit card balance."
balance = gets.chomp.to_f

puts "Please enter your interest rate %."
apr = gets.chomp.to_f

puts "How much $ would you like to pay every month?"
payment = gets.chomp.to_f

calc_payment

Я получаю сообщение об ошибке:

'calc_payment': неопределенная локальная переменная или метод 'payment' для main: Object (NameError)


person Greg. O Hajdu    schedule 12.10.2013    source источник
comment
Вори, небольшое предложение: (payment / balance) * 100 или (лучше) 100 * payment / balance, а не payment / balance * 100 (яснее). Кроме того, у вас может быть puts "hi\n\n", а не puts "hi"; puts; puts (только стилистическая разница).   -  person Cary Swoveland    schedule 12.10.2013


Ответы (1)


Ваша проблема связана с областью переменной. payment имеет локальную область видимости, поэтому функция calc_payment не может ее "видеть". Здесь я изменил вашу программу так, чтобы вы передавали payment, balance и apr в функцию calc_payment. Я также переместил m_counter в функцию.

def calc_payment(payment, balance, apr)
  m_counter = 0
  payment_percentage = payment / balance * 100
  monthly_apr = apr / 12

  while balance > 0
   m_counter = m_counter + 1
   balance = balance / 100 * monthly_apr
   balance = balance - payment
  end

  puts
  puts "Monthly payment: $" + payment
  puts "Balance payoff: " + m_counter + " months" 

end

puts "Welcome to your credit card payment calculator!"
puts

puts "Please tell me your credit card balance."
balance = gets.chomp.to_f

puts "Please enter your interest rate %."
apr = gets.chomp.to_f

puts "How much $ would you like to pay every month?"
payment = gets.chomp.to_f

calc_payment(payment, balance, apr)
person Andrew    schedule 12.10.2013