我正在做一个小游戏,其中显示数学问题和用户输入答案。
当用户写一个字母时,它转换为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
您可以使用 Integer()
,如果没有转换,它会引发异常。
begin
@userAnswer = Integer(@userAnswer, 10)
rescue ArgumentError
puts "#{@userAnswer.inspect} is not an integer, please try again..."
@userAnswer = gets.chomp
retry
end
@userAnswer.scan(/[^0-9]/)
这将检查用户是否回答了 0 到 9 范围内不是数字的任何内容。
您可以使用 Enumerable#all? 来检查是否所有字符都是数字。这将检查每个字符是否都在 0-9 范围内。如果有非数字,它将要求重复代码。
while !@userAnswer.chars.all?{|c|[*'0'..'9'].include?(c)}
puts "Found a non digit in your input , please try again...."
puts @userAnswer = gets.chomp
end