我如何循环请求用户输入,直到用户输入正确的信息?

6

我是一个初学者,正在尝试学习Ruby。到目前为止,我已经学了一些较简单的东西,但是在尝试结合我学到的几个知识点时遇到了困难。

我的目标是询问用户一个问题,并告诉他们输入1或2。如果他们输入1,则使用简单的if语句来响应一个选项;如果他们输入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?我知道这可能是某种循环,但似乎想不出要使用哪种循环以及如何重复请求用户输入(如果必要)直到获得所需的输入。任何帮助都将不胜感激。谢谢。

哇,你们太棒了。非常感谢!我会试用所有这些并看看它们的表现如何。我没有足够的经验知道哪个更适合我尝试的东西,但它们似乎都能完成任务。我刚刚开始学习,因此这个网站和从有经验的人得到快速帮助使得我进步很大。我一定会在这里学习,并且一定会留下来帮助新手。哈哈,再次感谢! - Bushido Code
4个回答

9

你说得对,你需要在循环中运行你的代码。使用一个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

2
尝试使用以下方式的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

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

您可以尝试使用此方法来使您的代码更清晰。

0

虽然这个问题的标题有些无关紧要,请看看这里使用的技巧:Ruby Retry and ensure block is not working

在 Ruby 中,使用错误检测和独特的 retry 关键字,可以轻松地进行重试循环,并且具有良好的错误处理。

但是,请注意我指出的示例并不是最好的。存在一些小问题。例如,您不应该捕获 Exception,而是简单的 rescue => e 就足够了。但总体思路应该是相当清晰的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接