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

时间:2016-06-28 04:32:29

标签: ruby logic

我有这个代码,我输入三角形边的输入。根据值,它将打印三角形是等边,等腰或斜角。它正在执行数值,但是如何指定输入应该只是整数?例如,如果我输入“w”,它应该表示无效或错误,但在这种情况下,它会执行。我该如何解决这个问题?

基本上,我正在寻找一种方法来写如果要输入一个字符串,它应该显示为一个错误(然后我会写一个print语句说它是无效的)。那我可以把它放到另一个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

6 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。如果您允许使用前导符号,

>>> c = sorted(a, key=operator.itemgetter(0), reverse=True)
>>> c
[(2, u'def'), (1, u'abc')]

是可能的。

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

答案 1 :(得分:0)

如果您正在处理整数,可以使用ruby进行检查。

请注意,这并不像正则表达式那样强大,但它涵盖了大多数情况。

if (input != '0') && (input.to_i.to_s != input.strip)
  # input is not a number
else
  # input is a number
end
如果您想接受带有前导或尾随空格的输入,那么

strip就可以了,否则您可以将其关闭。

答案 2 :(得分: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

# ...

答案 3 :(得分: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."

答案 4 :(得分:0)

我假设接受转换为float时等于整数的任何字符串值,并返回整数值。此外,我假设可以使用"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 

答案 5 :(得分:0)

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

Integer('1234')
#=> 1234

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

这可以与retry

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