2012-04-03 128 views
1

提示使用循环我开始:用的if/else/ESIF

puts "Hello there, and what's your favorite number?" 
    favnum = gets.to_i 
    puts "Your favorite number is #{favnum}?" " A better favorite number is #{favnum + 1}!" 
    puts "Now, what's your favorite number greater than 10?" 
    favnumOverTen = gets.to_i 
    if favnumOverTen < 10 
     puts "Hey! I said GREATER than 10! Try again buddy." 
    else 
     puts "Your favorite number great than 10 is #{favnumOverTen}?" 
     puts "A bigger and better number over 10 is #{favnumOverTen * 10}!" 
puts "It's literally 10 times better!" 
    end 

这工作得很好,但如果用户输入的数少于10的程序结束。 我想让用户再次尝试,直到他们输入一个大于10的数字。 我应该用循环来做这件事吗?

这是我花了在摇摆,但显然这是错误的:

puts "Hello there, and what's your favorite number?" 
    favnum = gets.to_i 
    puts "Your favorite number is #{favnum}?" " A better favorite number is #{favnum + 1}!" 
    puts "Now, what's your favorite number greater than 10?" 
    favnumOverTen = gets.to_i 
    if favnumOverTen < 10 
    loop.do 
     puts "Hey! I said GREATER than 10! Try again buddy." 
     favnumOverTen = gets.to_i 
    until favnumOverTen > 10 
    else 
     puts "Your favorite number great than 10 is #{favnumOverTen}?" 
     puts "A bigger and better number over 10 is #{favnumOverTen * 10}!" 
puts "It's literally 10 times better!" 
    end 

回答

1

一个更好的解决办法是将得到的10最喜欢的数字一次,然后启动until循环检查favnumOverTen > 10这样的:

puts "What is your favorite number greater than 10?" 
favnumOverTen = gets.to_i 
until favnumOverTen > 10 do 
    puts "Hey! I said GREATER than 10! Try again buddy." 
    favnumOverTen = gets.to_i 
end 

这样一来,如果初始入口大于10时,直到永远不会执行循环(节省您的if语句)。

此外,你也知道,用骆驼的例子来写变量名并不认为是惯用的Ruby(即favnumOverTen应该是favnum_over_ten)。

+0

感谢您提供骆驼案例的提示。我正在阅读的这本书说要使用它。看起来很多Ruby代码只是基于个人偏好。我更喜欢你这样做的方式,因为它提供了可读性,但同时它使线条更长一些。我必须弄清楚哪一个我最喜欢... – Dante 2012-04-04 03:34:24

4

这里有一个方法,这比前两个更短一点:

puts "Now, what's your favorite number greater than 10?" 
until (favnumOverTen = gets.to_i) > 10 
    puts "Hey! I said GREATER than 10! try again buddy." 
end 

这样做是因为赋值返回赋值给变量的值。

+1

+1很好地完成了! – joelparkerhenderson 2012-04-04 00:08:32

+0

这是有效的,当然不是一个坏的方式来说明“Ruby中的所有东西都会返回一些东西”,但是我觉得只有两行你放弃了很多可读性。 – 2012-04-04 00:13:30

+1

@PaulSimpson你做这件事的方式有点重复(两条重复线条),这就是我发表这篇文章的原因。你可能已经多次看到'while line = gets ...'例子 – Jwosty 2012-04-04 00:26:30