【问题标题】:Ensure all values in user-input array are between 1 and 10确保用户输入数组中的所有值都在 1 到 10 之间
【发布时间】:2015-06-03 20:39:01
【问题描述】:

我正在尝试根据用户输入定义一个数组,并希望确保每个值都在 1 到 10 之间。我该怎么做?

所以我现在正在使用它。

array = gets.chomp

我希望用户只输入从 1 到 10 的值。我该怎么做?

【问题讨论】:

标签: ruby validation


【解决方案1】:

你可以使用下面的来做到这一点:

def verify(input)
    (1..10).to_a.include?(input)
end

#input is user input
if verify(input)
  #do some stuff
else
  #don't do stuff
end

【讨论】:

  • 我也在尝试使用 get.chomps。所以我想确保输入值不超过10。我该怎么做?
  • 输入值是什么意思?
  • 喜欢用户放入数组的值
【解决方案2】:

...所以你知道,gets.chomp 不返回数组。它返回一个字符串。像这样的东西会给你你想要的数组:

array = gets.chomp.split(/\D/).map { |e| e.to_i }

这会将其从单个字符串(恰好包含,-分隔值)转换为数字数组。

puts 'The array you entered was invalid!' if array.any? { |item| !(1..10).include?(item) }

它会检查 any 的值是否为 !(1..10).include?(item) 返回 true,当且仅当范围 [1,10](包括)包含 item 时才返回 true。如果是这样,它会打印出The array you entered was invalid!

但是,看起来您想要做的是物理上阻止用户在控制台中输入像 1112 这样的数字,这(至少在纯 Ruby 中)是不可能的。你能得到的最接近的是事后验证输入,这就是它的作用。如果您想让它们继续输入数组,直到它们输入的数组有效,请查看 Ruby 的各种循环。

请注意,@locoboy 的答案适用于单个数字,但在尝试验证整个数组或 gets.chomp 的直接结果时会失败。

【讨论】:

  • @ShailiParikh 不,它适用于数字数组。如果您也需要帮助将其转换为数字数组,请将输入格式添加到您的问题中。
  • 好的,所以我基本上必须将所有值都设置在 1 到 10 之间,用户将输入这些值。我有没有办法确保用户没有输入 11 或 12 或任何大于 10 的值
  • @ShailiParikh 这不是我问的。数字将以什么格式输入?进入标准输入,每个数字换行?一长串数字,每个数字都由某个字符分隔? 解释你想要什么。最好是在问题本身中,并附上示例。
  • 对,所以我可以提出错误声明,直到输入的值在我的范围内。如果我能做到吗?
  • @ShailiParikh 我敢肯定,如果你改写它的话,我可以回答这个问题。
猜你喜欢
  • 2021-12-31
  • 2021-04-15
  • 2021-09-21
  • 1970-01-01
  • 2021-04-01
  • 2018-05-14
  • 2017-09-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多