我有这个代码,我在这里输入三角形的边。根据不同的值,它将打印三角形是等边三角形、等腰三角形还是不等边三角形。它对数字值执行,但是我如何指定输入只能是整数呢?例如,如果我输入"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