我有另一个Ruby问题。
我想确保用户输入是5个数字,如果它或多或少我希望它输出错误。我可能有错误的循环我有时会感到困惑。
我必须使用Integer(gets.chomp)吗?
因为我从用户那里得到整数时也看到过。
print "What is your zip code? "
zip_code = gets.chomp
puts zip_code
zip_code_array = zip_code.split
unless zip_code_array.length == 5
puts "Error"
else
puts "Good"
end
答案 0 :(得分:3)
邮政编码不是整数。它是一个五位数的字符串。*例如,00911
是一个有效的邮政编码(圣胡安,波多黎各),但它在任何实际意义上都不是整数。
然后,正确的解决方案是不检查字符串是否是特定大小的整数,而是检查字符串是否为五位数。
正则表达式将简化这一点:
print "What is your zip code? "
zip_code = gets.chomp
puts zip_code
if zip_code =~ /^[0-9]{5}$/
puts "Good"
else
puts "Error"
end
如果你不熟悉正则表达式,这个就像这样分解:
/
^ # beginning of line
[0-9] # a digit 0-9
{5} # repeated exactly 5 times
$ # end of line
/x
*严格来说,邮政编码可以是五位数字或五位数字,后跟短划线和四位数字(ZIP + 4)。你应该明智地适应你的应用程序。
答案 1 :(得分:0)
您应该删除zip_code_array = zip_code.split
只有这样才能做到
unless zip_code.length == 5
puts "Error"
else
puts "Good"
end
问题是split
方法,基于空格拆分数组,输入邮政编码时不提供空格。因此,数组长度最终等于1.
答案 2 :(得分:0)
为什么要分割zip_code
不需要这样做,你必须直接检查字符串长度。
print "What is your zip code? "
zip_code = gets.chomp
puts zip_code
unless zip_code.length == 5
puts "Error"
else
puts "Good"
end
当您拆分zip_code时,它会将输入的字符串转换为包含一个元素的数组(例如,如果输入'123abc',然后zip_code.split
将其转换为[“123abc”],它将给出长度=每次1次)
你可以写如下(选项2):
print "What is your zip code? "
p gets.chomp.length == 5 ? "Good" : "Error"