2014-09-18 20 views
0

Как я могу выполнить цикл, если условие не выполнено?как выполнить условие, прежде чем переходить к следующему шагу?

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

@CarySwoveland, hm. это тоже хорошее решение. но то, к чему я так стремился, хотя и не указано явно в приведенном выше сообщении, также может сообщить пользователю, что они вписались в письмо, если они это сделали, и снова зацикливаться до тех пор, пока не будет иначе. – user273072545345

ответ

0

Вы можете использовать while и until в качестве модификатора для блока. Сначала это запустит блок, а затем проверит условное выражение и запустит блок до тех пор, пока он не пройдет, что вам нужно.

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

спасибо! Ой вей, правда? Я должен добавить не менее 15 символов?!?!?! Geez! – user273072545345

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 заявлении.

Смежные вопросы