是否可以比较用户输入?

时间:2015-10-09 21:46:18

标签: ruby

print "Enter your age in Numbers:"
user_input = gets.chomp
if user_input > 21 && user_input < 30
  puts "XYZ"
elsif user_input > 31 && user_input < 40
  puts "YZX"
elsif user_input > 40
  puts "ZXY"
else
  puts "Golden Age!"
end

2 个答案:

答案 0 :(得分:0)

问题是gets.chomp返回一个字符串

您可以使用String#to_igets.chomp.to_i

将其转换为整数

<小时/> 您可以使用between?

进一步提高代码的可读性
print "Enter your age in Numbers:"
number = gets.chomp.to_i
if number.between?(22, 29)
  puts "XYZ"
elsif number.between?(32, 39)
  puts "YZX"
elsif number > 40
  puts "ZXY"
else
  puts "Golden Age!"
end

甚至更好 - case声明:

print "Enter your age in Numbers:"
number = gets.chomp.to_i
case number
when (22...30)             then puts "XYZ"
when (32...40)             then puts "YXZ"
when (40..Float::INFINITY) then puts "ZXY"
else puts "Golden Age!"
end

<小时/> 注意:我使这些范围与原始解决方案兼容,但请注意,其中存在一些空白(例如31个)。

答案 1 :(得分:0)

您可以比较正确定义<=>的对象,但无法将字符串对象与fixnum对象进行比较。如果您打算以整数进行比较,则需要将输入转换为整数。此外,(假设您只获得可以转换为整数的输入),您的条件是多余的。你可能错误地使用&&。它可以这样写:

print "Enter your age in Numbers:"
user_input = gets.to_i
if user_input < 20 or [20, 21, 30, 31, 40].include?(user_input)
  puts "Golden Age!"
elsif user_input < 30
  puts "XYZ"
elsif user_input < 40
  puts "YZX"
else
  puts "ZXY"
end