如何检查输入是否是整数?——Ruby



我有这个代码,我在这里输入三角形的边。根据不同的值,它将打印三角形是等边三角形、等腰三角形还是不等边三角形。它对数字值执行,但是我如何指定输入只能是整数呢?例如,如果我输入"w",它应该说无效或错误,但在这种情况下,它执行。怎么解呢?

基本上,我正在寻找一种方法来编写,如果一个字符串被输入,它应该显示为一个错误(然后我会写一个打印语句说它是无效的)。我能把它放进另一个if语句吗?(在下面提到的之前)

示例代码:

puts "Enter the triangle length"
  x = gets.chomp
  puts "Enter the triangle width"
  y = gets.chomp

  puts "Enter the triangle height"
  z = gets.chomp

  if x == y and y == z
      puts "This triangle is equilateral"
      else if
       x==y or y == z or x==z
           puts "This triangle is isoceles"
        else if
          x!=y and y!=z and x!=z
             puts "this triangle is scalene"
         end
      end
  end

如果你处理的是整数,你可以用ruby检查。

注意,它不像正则表达式那样健壮,但它涵盖了大多数情况。

if (input != '0') && (input.to_i.to_s != input.strip)
  # input is not a number
else
  # input is a number
end

strip在那里,如果你想接受输入的前导或尾随空格,否则你可以离开它。

虽然所有其他答案可能或多或少都是可靠的,但我将选择另一个。既然三角形的边长都大于0,对吧?然后可以使用String#to_i方法的副作用:对于不转换为整数的所有内容,它返回零。因此:

x = gets.chomp.to_i
y = gets.chomp.to_i
z = gets.chomp.to_i
raise "Wrong input" unless x > 0 && y > 0 && z > 0
# ...

你可以这样做:

x = x.to_i
puts "Please enter an integer" if x == 0 

为什么?

因为:

"ABC".to_i # returns 0
你最好调用strip而不是chomp
gets.strip.to_i

一个例子:

## ruby user_age.rb
# input variables
name = ""
years = 0
MONTHS_PER_YEAR = 12 # a constant
# output variable
months = 0
# processing
print "What is your name? "
name = gets.strip
print "How many years old are you? "
years = gets.strip.to_i
puts "please enter an integer" if years == 0
months = years * MONTHS_PER_YEAR
puts "#{name}, at #{years} years old, "
"you are #{months} months old."

有几种方法。如果允许使用前导符号

x =~ /^[+-]?d+$/

是可能的。

您还必须考虑是否允许周围或嵌入空格(例如,符号和第一个数字之间的空格)。

我假设在转换为浮点数时,任何等于整数的字符串值都将被接受并返回整数值。此外,我假设整数可以用"xen"(或"xEn")表示法输入,其中x是整数或浮点数,n是整数。

def integer(str)
  x = Float(str) rescue nil
  return nil if x==nil || x%1 > 0
  x.to_i
end
integer("3")       #=> 3 
integer("-3")      #=> -3 
integer("3.0")     #=> 3 
integer("3.1")     #=> nil 
integer("9lives")  #=> nil 
integer("3e2")     #=> 300 
integer("-3.1e4")  #=> -31000 
integer("-30e-1")  #=> -3 
integer("3.0e-1")  #=> nil 

您可以使用Integer()来检查字符串是否包含整数:

Integer('1234')
#=> 1234
Integer('foo')
#=> ArgumentError: invalid value for Integer()

这可以与retry:

结合使用
begin
  number = Integer(gets) rescue retry
end

最新更新