Почему я получаю "Неопределенную локальную переменную" в калькуляторе Пифагора?
Я сделал калькулятор теоремы Пифагора в Ruby, и он содержит ошибку / не запускается. Ошибка:
undefined local variable or method `a2'
Мне было интересно, если кто-нибудь может помочь.
puts "Welcome to my pythagorean theorem calculator. This calculator can find the hypotenuse of any right triangle. Please enter side A of your triangle."
a = gets.to_f
puts "please enter side B of your triangle."
b = gets.to_f
a**2 == a2
b**2 == b2
a2 + b2 = a2_b2
puts "The hypotenuse of your triangle is: #{ Math.sqrt(a2_b2)}"
2 ответа
Решение
У вас просто две небольшие ошибки:
puts "Welcome to my pythagorean theorem calculator. This calculator can find the hypotenuse of any right triangle. Please enter side A of your triangle."
a = gets.to_f
puts "please enter side B of your triangle."
b = gets.to_f
a2 = a**2
b2 = b**2
a2_b2 = a2 + b2
puts "The hypotenuse of your triangle is: #{ Math.sqrt(a2_b2)}"
-
Welcome to my pythagorean theorem calculator. This calculator can find the hypotenuse of any right triangle. Please enter side A of your triangle.
3
please enter side B of your triangle.
4
The hypotenuse of your triangle is: 5.0
Ваши переменные не определены
Вы путаете присваивание с оператором равенства (==
). Когда вы заявляете:
a**2 == a2
вы спрашиваете Ruby, равно ли2 значению переменной a2, которое в вашем примере кода не определено. Вы можете увидеть эту же ошибку на работе, если откроете новую консоль Ruby и введете a2 без программы:
irb(main):001:0> a2
NameError: undefined local variable or method `a2' for main:Object
from (irb):1
from /usr/bin/irb:12:in `<main>'
Некоторые Рефакторинг
Хотя вы можете исправить свой код, гарантируя, что вы присваиваете значения переменным, прежде чем ссылаться на них, вы, вероятно, должны сделать свой код более идиоматическим. В качестве примера рассмотрим следующее:
# In the console, paste one stanza at a time to avoid confusing the REPL
# with standard input.
print 'a: '
a = Float(gets)
print 'b: '
b = Float(gets)
c_squared = a**2 + b**2
hypotenuse = Math.sqrt(c_squared)