下面的代码旨在成为我可以针对数学表达式运行的计算器脚本。输出显然是错误的。我认为它是无限循环的。如果有人能在这里找到错误,我将不胜感激。
我不能eval
在我的解决方案中使用。你在这里看到的一般格式是我必须使用的。我也 99% 确定我也不能使用case
声明。
编码
expression = (ARGV[0]).gsub(/\s/, '')
def theCalculator (expression)
while expression =~ /\D/
if expression =~ /\(.*\)/
expression = expression.scan(/\((.*)\)/)
expression = $` + (theCalculator(expression)).to_s + $'
elsif expression =~ /\^/
expression = expression.scan(/(\d*|\d*\.\d*)(\^)(\d*|\d*\.\d*)/)
expression = $1.to_f ** $3.to_f
expression = $` + expression.to_s + $'
elsif expression =~ /\*|\//
expression = expression.scan(/(\d*|\d*\.\d*)(\*|\/)(\d*|\d*\.\d*)/)
if $2 == "*"
expression = $1.to_f * $3.to_f
else
expression = $1.to_f / $3.to_f
end
expression = $` + expression.to_s + $'
elsif expression =~ /\+|\-/
expression = expression.scan(/(\d*|\d*\.\d*)(\+|\-)(\d*|\d*\.\d*)/)
if $2 == "+"
expression = $1.to_f + $3.to_f
else
expression = $1.to_f - $3.to_f
end
expression = $` + expression.to_s + $'
end
end
return expression
end
expression = theCalculator(expression)
puts expression
输入
ruby calc.rb "2 ^ (4 - 1.0) + 1"
输出
(big ol infinite loop)