将用户的输入与多个值进行比较

时间:2014-03-15 22:31:19

标签: ruby

我开始学习编程,我选择使用Codecademy学习Ruby。但是,我试图巩固我的学习,但我无法让这个工作!

print "What is 2 + 2 ="
sum_var = gets.chomp
sum_var.downcase!
if sum_var == "four" || 4
   puts "Correct!"
  else sum_var != "four" || 4
   puts "Wrong! #{sum_var} is not the answer!"
end

它只是返回'正确!'即使它是错的。

2 个答案:

答案 0 :(得分:5)

您需要编写如下代码:

print "What is 2 + 2 ="
sum_var = gets.chomp
# don't need to apply the bang method like you did - sum_var.downcase!
if sum_var.downcase == "four" || sum_var == '4'
   puts "Correct!"
else # else don't need condition checking, so I removed.
   puts "Wrong! #{sum_var} is not the answer!"
end

sum_var = gets.chomp会为您提供字符串,不会将您转换为数字。所以,即使你从控制台传递号码,它也会变成"4""7"等。

让我向您解释为什么总是将"Correct!"作为输出

sum_var == "four" || 4 - 在此表达式中,只要sum_var不等于"four",您的第一个表达式就会被评估为false,但是当控件去测试第二个表达式时,它找到4。您知道在Ruby中,除了truenil之外,所有对象都是false。因此4被视为true。因此,在您的代码中始终会if块被执行,并且您将继续作为输出"Correct!"

现在在你的代码中,你做了一些其他的混乱,我在上面的代码中纠正了。

答案 1 :(得分:1)

您的代码存在问题

if sum_var == "four" || 4

==通常会返回false,因此会评估第二部分,因为==的优先级高于||的优先级。由于除falsenil之外的所有对象都是" truthy"在Ruby中,无论用户输入什么,表达式最终都是true。 @ArupRakshit提出的更正,只是想增加一些理由。