Ruby简单数学每次输出0.0

  • 本文关键字:输出 简单 Ruby ruby
  • 更新时间 :
  • 英文 :


最近我开始用多种语言编写同样的东西(bmi计算器(。我被红宝石卡住了。一切都完成了,但简单的数学题总是输出0.0。我试着研究这个问题,但在ruby中找不到类似的东西。

这是我的代码:

print 'Weight: [lbs/kg] '
w = gets.to_f
print 'Height: [in/m] '
h = gets.to_f

print 'Choose your measurement system: [I/M] '
mSys = gets.to_s
if mSys == 'i' || mSys == 'I'
bmi = 703 * (w / (h**2))         # Problem is here
elsif mSys == 'm' || mSys == 'M'
bmi = w / ((h)**2)               # And here.
end
bmi = bmi.to_f
puts bmi
if bmi < 18.5
puts 'Consider eating few burgers.'
elsif bmi > 18.5 && bmi < 25
puts 'You have nothing to worry about.'
elsif bmi > 25
puts 'Great Council of BMI says You are overwieght!'
end

从不计算bmi。

你的bmi计算中缺少else条款。如果我们在中添加一个并检查mSys。。。

if mSys == 'i' || mSys == 'I'
bmi = 703 * (w / (h**2))
elsif mSys == 'm' || mSys == 'M'
bmi = w / ((h)**2)
else
p "#{mSys}"
end

我们得到"in"。你需要去掉换行符。

mSys = gets.chomp

注意,不需要to_sgets已经返回了一个String。


编写逻辑的更为Rubyish的方法是使用case、snake大小写、清除变量名和常量。

BMI_CONVERSION_FACTOR = 703
bmi = case measurement_system.downcase
when 'i'
BMI_CONVERSION_FACTOR * (w / (h**2))
when 'm'
w / (h**2)
else
raise "Unknown measurement system: #{measurement_system}"
end

最新更新