Почему я получаю "Неопределенную локальную переменную" в калькуляторе Пифагора?

Я сделал калькулятор теоремы Пифагора в 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)
Другие вопросы по тегам