我是一个试图学习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?我知道这可能是某种循环,但我似乎不知道该使用哪种,以及如何结合反复请求用户输入(如果必要),直到获得所需的输入。如有任何帮助,我们将不胜感激。谢谢
您需要在循环中运行代码,这是正确的。使用以gets.chomp
为条件的while
循环,您可以继续请求用户输入,直到您决定得到您想要的内容。
在这种情况下,您需要验证问题的答案,然后再次询问它是否无效。你不需要做太多改变,只需要确保在答案正确时跳出循环。如果答案是错误的,请再次打印提示。
这是一个稍微重构的版本,使用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
尝试使用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
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
您可以尝试这样做以使代码更干净。
虽然这个问题的标题有些无关,但请参阅这里使用的技巧:Ruby重试并确保块不工作
Ruby中使用了错误检测和唯一的retry
关键字,使您可以轻松地进行重试循环,并进行良好的错误处理。
然而,请注意,我所举的例子并不是最好的。有一些小问题。例如,您不应该捕获Exception
,相当简单的rescue => e
就足够了。但总体思路应该相当清晰。