Ruby 仅接受整数作为输入的条件语句
我编写了一个代码,其中它询问多个个人的问题,每个人的回答都被放入一个散列中。这是一个循环,看起来像这样Ruby 仅接受整数作为输入的条件语句,ruby,loops,conditional-statements,Ruby,Loops,Conditional Statements,我编写了一个代码,其中它询问多个个人的问题,每个人的回答都被放入一个散列中。这是一个循环,看起来像这样 arr:[] (1..n).each do |i| hash=Hash.new() puts "Please input a value for day # #{i}" hash["day1"]=gets.chomp.to_f puts "Please input a value for day # #{i}" hash["day2"]=gets.chomp.to
arr:[]
(1..n).each do |i|
hash=Hash.new()
puts "Please input a value for day # #{i}"
hash["day1"]=gets.chomp.to_f
puts "Please input a value for day # #{i}"
hash["day2"]=gets.chomp.to_f
arr << hash
end
arr:[]
每个人都做|
hash=hash.new()
放入“请为第##{i}天输入一个值”
hash[“day1”]=get.chomp.to\u f
放入“请为第##{i}天输入一个值”
hash[“day2”]=get.chomp.to\u f
arr您可以获得如下所示的日值。当输入数字以外的字符时,它会再次询问当天的值
puts 'Enter number of days'
days_hash = {}
number_of_days = gets.chomp.to_i
day = 1
while day <= number_of_days
puts "Please enter a value for day # #{day}"
input = gets.chomp
if input !~ /\D/
days_hash["day#{day}"] = input.to_i
day += 1
else
puts "Please enter only number"
next
end
end
p days_hash
#=> { "day1" => 2, "day2" => 4, "day3" => 8 }
days_hash['day2']
#=> 4
输入“输入天数”
天数\u哈希={}
天数=gets.chomp.to\u i
天=1
而第{“day1”=>2,“day2”=>4,“day3”=>8}
天\u散列['day2']
#=> 4
< /代码> 也许您可以考虑验证用户输入的一般方法,<强>注意本示例代码>需要“日期”<代码> > < /P>
所以,您可以将用户输入检查为整数、浮点、格式化日期或任何您可以添加的内容
首先定义一个包含问题文本、验证方法和转换输入方式的问题数组,如下所示:
questions = [
{text: "Enter an integer:", validate: :must_be_an_integer, convert: :my_to_i},
{text: "Enter a float:", validate: :must_be_a_float, convert: :my_to_f},
{text: "Enter a data as d-m-yyyy", validate: :must_be_a_formatted_date, convert: :to_formatted_date}
]
然后定义要由:validate
键调用的一些方法,用于用户输入验证:
def must_be_an_integer(num)
Integer(num).class == Integer rescue false
end
def must_be_a_float(num)
Float(num).class == Float && num.include?('.') rescue false
end
def must_be_a_formatted_date(date_str)
date = Date.strptime(date_str, "%d-%m-%Y") rescue false
return false unless date
date.year <= 9999 && date.year >= 1000
end
最后反复回答以下问题:
res = questions.map do |question|
answer = nil
3.times do
puts question[:text]
u_input = gets.chomp
if send question[:validate], u_input
answer = send question[:convert], u_input
break
end
end
if answer.nil?
puts "C'mon man! Check your keyboard!" # after three input errors!!
break
end
{ question: question[:text], answer: answer }
end
结果示例:
#=> [
{:question=>"Enter an integer:", :answer=>1},
{:question=>"Enter a float:", :answer=>1.1},
{:question=>"Enter a data as d-m-Y", :answer=>#<DateTime: 2020-10-27T00:00:00+00:00 ((2459150j,0s,0n),+0s,2299161j)>}
]
#=>[
{:问题=>“输入一个整数:”,:答案=>1},
{:问题=>“输入一个浮点:”,:答案=>1.1},
{:问题=>“以d-m-Y的形式输入数据”,:答案=>#}
]
hash[“day1”]=Integer(get)rescue nil是您想要的?在为该键分配了用户输入后,您可以使用相同的键重新访问它,如if hash[“day1”]=“some_value”
。请参阅“”以及链接页面和“”。由于出现错误,您的代码无法运行。您的问题解决了吗?
#=> [
{:question=>"Enter an integer:", :answer=>1},
{:question=>"Enter a float:", :answer=>1.1},
{:question=>"Enter a data as d-m-Y", :answer=>#<DateTime: 2020-10-27T00:00:00+00:00 ((2459150j,0s,0n),+0s,2299161j)>}
]