在Ruby IF语句中使用多个条件

在Ruby IF语句中使用多个条件,ruby,Ruby,我试图在IF语句中使用多个条件,以查看输入的数字是5、10还是15。如果输入不是这些数字之一,则应输出错误消息 when 3 print("Enter the discount percentage, must be (5, 10, or 15)") dis= gets.to_i if (dis != 5 || dis != 10 || dis != 15) puts("You entered an invalid discount") else end 但是,即使

我试图在IF语句中使用多个条件,以查看输入的数字是5、10还是15。如果输入不是这些数字之一,则应输出错误消息

when 3
  print("Enter the discount percentage, must be (5, 10, or 15)")
  dis= gets.to_i
  if (dis != 5 || dis != 10 || dis != 15)
    puts("You entered an invalid discount")
  else
  end
但是,即使输入了5、10和15,它也总是输出错误消息

when 3
  print("Enter the discount percentage, must be (5, 10, or 15)")
  dis= gets.to_i
  if (dis != 5 || dis != 10 || dis != 15)
    puts("You entered an invalid discount")
  else
  end

符合您的情况的正确逻辑是

if dis != 5 && dis != 10 && dis != 15
因为如果数字不是5、10或15,则要打印错误。 更酷的写作方式是

if [5, 10, 15].all? { |i| dis != i }

符合您的情况的正确逻辑是

if dis != 5 && dis != 10 && dis != 15
因为如果数字不是5、10或15,则要打印错误。 更酷的写作方式是

if [5, 10, 15].all? { |i| dis != i }
可以使用:

可以使用:


只是使用regex的另一种方法:

puts "Enter discount, must be 5,10 or 15"
puts gets[/\A1?[05]\n\z/] ? 'Discount applied' : 'Invalid discount'

只是使用regex的另一种方法:

puts "Enter discount, must be 5,10 or 15"
puts gets[/\A1?[05]\n\z/] ? 'Discount applied' : 'Invalid discount'

或者即使[5,10,15]没有?{| i | dis==i}感谢您向我展示了两种不同的写作方式并解释了原因。非常感谢。我的荣幸,先生:或者即使[5,10,15]。没有?{| i | dis==i}感谢您向我展示了两种不同的写作方式并解释了原因。非常感谢。我的荣幸先生:从字符串开头获取整数的正确方法是,而不是_i.p | | q与!!p&&!德摩根定律中的q。所以你的表情和我的一样!dis==5&&dis==10&&dis==15。括号内的表达式对于dis的任何值都显然是错误的,所以!false=>true,导致执行puts而不考虑dis的值。为什么要急于选择答案?从字符串开头获取整数的正确方法是,而不是_i.p | q与!!p&&!德摩根定律中的q。所以你的表情和我的一样!dis==5&&dis==10&&dis==15。括号内的表达式对于dis的任何值都显然是错误的,所以!false=>true,导致执行puts而不考虑dis的值。为什么要急于选择答案?谢谢,我以前没有见过这个答案,因为我对这个问题还是很陌生。我会把它留着以后用。@pjs实际上没有吗?因为空数组是真实的,所以它不会工作,所以感谢您的注意@安德烈·伊迪内科,有吗?你不需要grep,而且对于更大的列表,它应该更快,因为它会缩短搜索。谢谢,我以前没见过这个,因为我对它还是个新手。我会把它留着以后用。@pjs实际上没有吗?因为空数组是真实的,所以它不会工作,所以感谢您的注意@安德烈·伊迪内科,有吗?您不需要grep,而且对于较大的列表,它应该更快,因为它会缩短搜索。