2015-02-10 65 views
1

当我将75的值传递给我的程序时,为什么打印出“没有号码”? 75小于100且大于50.它应该打印出“范围:50-100”。Ruby中的条件

def report_back(value) 
case value 
    when (value < 100) && (value > 50) 
     message = 'number range: 50 - 100' 
    else 
     message = 'no number' 
end 
    return message 
end 

puts 'enter a number between 0 - 100:' 
number = gets.chomp.to_i 

puts report_back(number) 

回答

1

是否有您选择来构建你的答案就像任何理由这个?你可以很容易地写出来,就像这样:

def report_back(value) 
    value < 100 && value > 50 ? message = 'number range: 50 - 100' : message = 'not' 
    puts message 
end 

number = gets.chomp.to_i 
report_back(75) 

您通常使用case当有3点以上的选择。在这里,一个简单的if...else可能是一个更好的选择,因为实际上只有2个选项。我选择在这里使用三元运算符,但?..:if...else相同。

几个技术要点

  • 没有必要为return报表; Ruby具有隐式返回,所以return关键字不是必需的。
  • 使用puts以外的函数返回数据一般是不鼓励的;其最好使用往里面即:在地方return关键字这里

希望有所帮助的。你一开始就有一个好的开始 - 你很快就会得到它!

+0

#这里是我的新程序,让我知道什么您认为? DEF report_back(值) \t如果值<100 &&值> 50 \t \t放 '数范围:50 - 100' \t ELSIF值<50 \t \t放 '数范围:0 - 50' \t别的 \t \t卖出期权 '数为大于100' \t端 端 放 '输入0之间的数字 - 100:' 数= gets.chomp.to_i puts report_back(number) – DEdesigns57 2015-02-10 16:10:11

+0

看起来不错!小评论:在最后一行(第13行?)你再次使用'puts',这是多余的。 'puts'打印到标准输出(它将在控制台上打印出来),这样它将从方法内打印出正确的结果。我没有运行它,但我的猜测是,所有'puts'都会在控制台输出中添加一行。删除它会给你你想要的程序。虽然很大的改进!看起来它会打印你想要的。 – 2015-02-10 16:27:25

1

您错误地使用了case声明。

更合适的方法是在您的when中使用范围或使用if语句。

下面的示例。

def report_back(value) 
    case value 
    when 50...100 
    'number range: 50 - 100' 
    else 
    'no number' 
    end 
end 

另外,您也不需要return值。

+0

那么符号......的意思是什么?是包容性的吗? – DEdesigns57 2015-02-10 16:00:09

+0

不,它不包含在内,所以'(1..2)'会有1和2,但是(1 ... 2)'只有1 – 2015-02-10 16:39:23

1

我不是在所有,但基于this post一个Ruby专家,我建议你写你的switch语句是这样的:

case value 
when 50..100 
    message = 'number range: 50 - 100' 
else 
    message = 'no number' 
end