如何解决为什么我的 BMI 计算器总是返回用户输入的体重?
def get_values()
puts("Please enter your height in metres.")
height = gets.chomp.to_i
puts("Please enter your weight in kilograms.")
weight = gets.chomp.to_i
bmi = ((weight).to_f / (height * height).to_f)
puts("Your BMI is: ")
puts bmi.to_s
end
def main()
puts("Welcome to the BMI calculator. Would you like to continue?")
answer = gets.chomp
if (answer == "yes" or "Yes")
get_values()
else
("Understandable,have a nice day.")
end
end
main()
如果您运行此程序,您将看到您输入的任何体重值都将作为 BMI 返回。为什么是这样?我简直无法理解为什么会这样。显然,我是 Ruby 的新手。以前,我在计算中没有 .to_f 转换,但这也返回了“重量”的用户输入值。请帮忙。
编辑:虽然我非常感谢下面重写我的代码,因为它与我通常的编码风格非常不同,我已经用下面的答案解决了这个问题 - 我只是在 .to_f 中进行了转换错误的地方。这个效果很好,精确到小数点后 14 位!
def get_values()
puts("Please enter your height in metres.")
height = gets.to_f
puts("Please enter your weight in kilograms.")
weight = gets.to_f
bmi = ((weight) / (height * height))
puts("Your BMI is: ")
puts bmi.to_s
end
def main()
puts("Welcome to the BMI calculator. Would you like to continue?")
answer = gets.chomp
if (answer == "yes" or "Yes")
get_values()
else
("Understandable,have a nice day.")
end
end
main()
编辑:我不记得我是否更改了与计算相关的任何内容,但代码已再次更新。
def get_values()
puts("Please enter your height in metres.")
height = gets.to_f
puts("Please enter your weight in kilograms.")
weight = gets.to_f
bmi = ((weight) / (height * height))
puts("Your BMI is: ")
puts bmi.to_s
return bmi
end
def harsh_truths()
bmi = get_values()
if (bmi < 18.5)
puts("You are underweight.")
elsif (bmi > 18.5) and (bmi < 25.0)
puts("You are a healthy weight.")
elsif (bmi > 25) and (bmi < 30)
puts("You are overweight.")
elsif (bmi > 30)
puts("You are obese.")
end
end
def main()
puts("Welcome to the BMI calculator. Would you like to continue?")
answer = gets.chomp
if (answer == "yes") or (answer == "Yes")
harsh_truths()
else
("Understandable,have a nice day.")
end
end
main()
以上是我一直提到的“更新代码”。当我添加使用英制值计算 BMI 的选项时,我希望能再次见到你们。
解决方法
这是相同代码的固定的、更惯用的 Ruby 版本:
# Define a generic method to grab input
def ask(prompt)
puts prompt
gets.to_f
end
# Loop while more input is available
loop do
# puts doesn't always use brackets,it's subjective. You can,but
# in many cases they're omitted for simplicity.
puts("Welcome to the BMI calculator. Would you like to continue?")
case (gets.chomp)
when /\An/i # Anything that "starts with" (\A) "n" + case insensitive (/i)
puts "Understandable,have a nice day."
break
end
# Get some input
height = ask("Please enter your height in metres.")
weight = ask("Please enter your weight in kilograms.")
# Notice how if they're already float this becomes super easy
bmi = weight / (height * height)
# Use string interpolation,automatic .to_s conversion happens.
puts "Your BMI is: #{bmi}"
end
,
只需将高度和 weight
更改为 float
如下:
height = gets.chomp.to_f
weight = gets.chomp.to_f
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。