我有这个代码,我输入三角形边的输入。根据值,它将打印三角形是等边,等腰或斜角。它正在执行数值,但是如何指定输入应该只是整数?例如,如果我输入“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
答案 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