我正在开发一款小型游戏,可以显示数学问题,用户输入答案。
当用户写一封信时,它转换为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 :(得分:2)
您可以使用Integer()
,如果没有转换,则会引发异常。
begin
@userAnswer = Integer(@userAnswer, 10)
rescue ArgumentError
puts "#{@userAnswer.inspect} is not an integer, please try again..."
@userAnswer = gets.chomp
retry
end
答案 1 :(得分:1)
@userAnswer.scan(/[^0-9]/)
这将检查用户是否回答了0到9范围内不是数字的任何内容。
答案 2 :(得分:0)
您可以使用 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