正如我在标题中所要求的那样。当用户输入一些仅包含数字的值时,如何创建一个循环,如果不是,则会再次尝试。
prompt = "> "
puts "What is the salary for the accountant: "
print prompt
while accountant = gets.chomp
if accountant == (0..9)
puts "Nice"
break
else
"try again"
print prompt
end
end
end
答案 0 :(得分:1)
没有正则表达式的简单解决方案是:
accountant.chars.all?{|n| ("0".."9") === n}
您可能想了解" ===" Ruby中的运算符,如果你不知道它是如何工作的,因为如果你来自PHP或Javascript,它可能会让你感到困惑。
What does the "===" operator do in Ruby?
答案 1 :(得分:0)
你的问题在这一行:
if accountant == (0..9)
这是检查相等的值范围 - 这不是你想要的。
由于来自gets.chomp
的输入始终是字符串,您需要检查它是否只包含字符:"0"
,"1"
,{{ 1}},...和"2"
。
一种方法是使用正则表达式:
"9"
if accountant =~ /\A\d+\z/
表示“字符串开头”\A
表示“字符串结束”\z
表示“一个或多个数字”(0-9)请注意,您在评论\d+
中建议的解决方案存在以下缺陷:
/^-?[0-9]+$/
表示“行的开头”(因此可以在换行符之前插入任意其他字符)^
表示“行的结尾”(因此可以在换行符之后插入任意其他字符)$
还允许使用可选的连字符。在这种情况下,大概是不你想要的东西,因为输入是薪水 - 肯定不会是负面的!