如何在进入下一步之前满足条件?

时间:2014-09-18 04:36:07

标签: ruby loops

如果不满足条件,我该如何循环?

print "Please enter first number "
first_number = gets.chomp 

if first_number =~ /[a-zA-Z]/ 
puts "not a number"
end 

根据上面发布的代码,如果您输入一封信,您将收到不是数字的声明。

如果用户输入信件,我该如何重复?

截至目前,它将进入下一个:

 print "Please enter second number "
 second_number = gets.chomp
 if second_number =~ /[a-zA-Z]/
   puts "not a number"
 end 

我不希望它转到下一个,直到用户在第一个中输入了一个数字。

2 个答案:

答案 0 :(得分:0)

您可以使用while和until作为块的修饰符。这将首先运行块,然后检查条件并再次运行块直到它通过,这是您想要的行为。

begin
  puts 'Please enter first number'
  first_number = gets.chomp
end until first_number =~ /\d+/

答案 1 :(得分:0)

我建议你考虑这样做:

num = nil # initialize to anything
loop do
  puts 'Enter a number'
  num = gets.chomp.strip
  case num
  when /^\d+$/
    break
  when /^[a-z]+$/i
    print "You entered one or more letters and no digits."
  else
    print "You made some other illegal entry."
  end
  puts "  Try again"
end
puts "You enterered the number #{num}"

一些注意事项:

  • num必须在循环之前初始化(到任何东西),以便在循环的end语句之后显示它。

  • case语句,因为它使用===来评估when表达式,允许您为每个案例输入一个正则表达式。

  • 正则表达式中的
  • ^$是锚,因此,例如,"34b" =~ /^\d+$/ => nil(我假设你想要的),而不是"34b" =~ /\d+/ => 0

  • i中的/[a-z]+$/i允许匹配的字母为大写或小写。

  • 用户可以输入一个或多个数字,或者一个或多个字母,但还有许多其他可能性("3$,a"),所以我在{case中添加了另一个“全能”的可能性{1}}陈述。