2014-11-20 3 views
1

Я работаю над маленькой игрой, в которой отображаются математические вопросы и ответы пользователей.Проверьте, введен ли пользователь цифрой

Когда пользователь пишет письмо, его преобразование в 0, но я хотел бы, чтобы программа попросила пользователя повторно ввести вход.

Код должен принимать +, - и цифры Каждый другой вход должен запускать цикл, пока не будет введен правильный ввод.

Вот как мой код выглядит ....

def ask_questions 

    question = @questionAndAnswerList[@currQuestion] 

    a = question.question.q1 
    b = question.question.q2 

    print("what is #{a} #{a+b > question.answer ? "-" : '+'} #{b} ? = ") 
    puts @userAnswer = gets().chomp 

    #test if @userAnswer has a Digit value 

    while /[+|-]\D/ =~ @userAnswer 
    puts "Found a non digit in your input , please try again...." 
    puts @userAnswer = gets.chomp 

    end 

    @userAnswer = @userAnswer.to_i 

end 
+0

', а/[+ | -] \ D/= ~ @ userAnswer' это может быть изменено на 'while/[+ | -]? \ D +/= ~ @ userAnswer' –

ответ

2

Вы можете использовать Integer(), который генерирует исключение, если нет преобразования.

begin 
    @userAnswer = Integer(@userAnswer, 10) 
rescue ArgumentError 
    puts "#{@userAnswer.inspect} is not an integer, please try again..." 
    @userAnswer = gets.chomp 
    retry 
end 
0

Вы можете использовать Enumerable # все?, чтобы проверить, являются ли все символы цифрами. Это проверяет, находится ли каждый символ в диапазоне 0-9. Если нет цифр, он попросит повторить код.

while [email protected]?{|c|[*'0'..'9'].include?(c)} 
    puts "Found a non digit in your input , please try again...." 
    puts @userAnswer = gets.chomp 
end 
1
@userAnswer.scan(/[^0-9]/) 

Это будет проверить, если пользователь правильно ответил на все, что это не цифра в диапазоне от 0 до 9.

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