2015-02-10 30 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