如果不满足条件,我该如何循环?
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
我不希望它转到下一个,直到用户在第一个中输入了一个数字。
答案 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}}陈述。