我是一名正在尝试学习Ruby的初学者。到目前为止,我已经学到了一些比较容易的东西,但我似乎总是试图结合我学到的一些东西。
我要做的是询问用户一个问题并告诉他们输入1或2.一个简单的if语句让我回答一个选项,如果他们输入1,另一个选项,如果他们输入2。但是,如果他们输入完全不同的东西,如不同的数字,字符串等,我如何提示他们再次尝试并让它循环回原始问题?
到目前为止我看到的是这样的。
prompt = "> "
puts "Question asking for 1 or 2."
print prompt
user_input = gets.chomp.to_i
if user_input == 1
puts "One response."
elsif user_input == 2
puts "Second response."
else
puts "Please enter a 1 or a 2."
end
这就是我被困住的地方。如何让它回到“要求1或2的问题”。直到用户输入1或2?我知道它可能是某种类型的循环,但我似乎无法弄清楚使用哪种类型以及如何在获得所需输入之前重复(如果需要)合并请求用户输入。任何帮助将不胜感激。谢谢。
答案 0 :(得分:7)
你是正确的,你需要循环运行你的代码。使用while
循环以gets.chomp
作为条件,您可以继续询问用户输入,直到您决定拥有所需内容为止。
在这种情况下,您需要验证问题的答案并再次询问它是否无效。除了确保在答案正确时突破循环外,您不需要改变很多。如果答案错误,请再次打印提示。
这是一个稍微重构的版本,使用case
代替,但它显示了您需要做的事情。毫无疑问,这是一种更清洁的方式......
prompt = "> "
puts "Question asking for 1 or 2."
print prompt
while user_input = gets.chomp # loop while getting user input
case user_input
when "1"
puts "First response"
break # make sure to break so you don't ask again
when "2"
puts "Second response"
break # and again
else
puts "Please select either 1 or 2"
print prompt # print the prompt, so the user knows to re-enter input
end
end
答案 1 :(得分:1)
user_input = 0
until [1,2].include? user_input do
puts "Please enter a 1 or a 2.>"
user_input = gets.chomp.to_i
end
if user_input == 1
puts "One response."
else
puts "Second response."
end
您可以尝试这样做以使代码清洁。
答案 2 :(得分:1)
尝试使用until
方法,如下所示:
prompt = "> "
print prompt
user_input = nil
until (user_input == 1 or user_input == 2)
puts "Please enter a 1 or 2."
user_input = gets.chomp.to_i
end
if user_input == 1
puts "One response."
elsif user_input == 2
puts "Second response."
else
puts "Please enter a 1 or a 2."
end
答案 3 :(得分:0)
虽然这个问题的标题有些不相关,但请看这里使用的技巧:Ruby Retry and ensure block is not working
使用Ruby中可用的错误检测和唯一retry
关键字,您可以轻松地执行重试循环,并且具有良好的错误处理能力。
但是,请注意我指出的例子并不是最好的。有一些小问题。例如,你不应该抓住Exception
,相当简单的rescue => e
就足够了。但总的想法应该是相当明确的。