1

我正在使用 Ruby 作为练习做一个简单的计算器。一切都很好,除了如何识别我输入的字符/符号是数字还是不使用 if-else 语句

例如:

Enter first number: a
Error: Enter correct number
Enter first number: -
Error: Enter correct number
Enter first number: 1
Enter second number:b
Error: Enter correct number
Enter second number: 2
Choose operator (+-*/): *
The product is: 2

这是我首先输入的代码:

print "Enter first number: "
x = gets.to_i
print "Enter second number: "
y = gets.to_i
print "Choose operator (+-*/): "
op = gets.chomp.to_s

我将使用 if-else 语句来识别输入的数字是否为数字

4

4 回答 4

2

如果您想测试字符串是表示整数还是浮点数,请使用Kernel#IntegerKernel#Float以及可选的第二个参数(哈希),其键值:exception等于false.

例如,

Integer('-123', exception: false)
  #=> -123
Integer("0xAa", exception: false)
  #=> 170
Integer('12.3', exception: false)
  #=> nil,
Integer('12a3', exception: false)
  #=> nil
Float('123', exception: false)
  #=> 123.0 
Float("1.2e3", exception: false)
  #=> 1200.0
Float('12a3', exception: false)
  #=> nil,
Float('1.2.3', exception: false)
  #=> nil

笔记

Integer("123\n", exception: false)
  #=> 123

表明您不必chomp在测试字符串是否表示整数(与 类似Float)之前进行测试。

一些示例说明了使用正则表达式测试字符串是表示整数还是表示浮点数时的限制或复杂性。

于 2021-10-13T19:30:19.727 回答
1

创建一个新的字符串方法

irb(main):001:0> class String
irb(main):002:1>   def number?
irb(main):003:2>     Float(self) != nil rescue false
irb(main):004:2>   end
irb(main):005:1> end

irb(main):012:0> x = gets
1
=> 1
irb(main):013:0> x.number?
=> true

irb(main):009:0> x = gets
s
=> "s\n"
irb(main):010:0> x.number?
=> false
于 2021-10-13T15:01:32.990 回答
0

use this ruby method

.is_a?(Integer)

For example:

input = gets.chomp
input.is_a?(Integer) # => true || false
于 2021-10-15T09:48:15.030 回答
0

执行此操作的典型方法是将其与正则表达式匹配:

x = gets.chomp
if x.match?(/^\d+$/)
  puts "#{x} is a number"
else
  puts "#{x} is not a number"     
end

这将测试给定的字符串是否与 pattern 匹配^\d+$,这意味着“行首,一个或多个数字字符,然后行尾”。请注意,这不会匹配诸如“,”或“。”之类的字符。- 只有一串数字 0-9。字符串#匹配?将返回一个布尔值,指示字符串是否与给定模式匹配。

于 2021-10-13T15:10:16.600 回答