提问人:Rothbury Estate 提问时间:3/29/2022 更新时间:4/25/2022 访问量:74
如何确保我不能通过用户输入 ruby 将整数或任何数字添加到数组中
How to ensure I can't add in integers or any numbers into an array via user input for ruby
问:
我正在尝试创建一个只允许字符串传递的数组,根本不允许数字。有没有办法使这成为可能?
我已经尝试了以下方法,期望如果一个整数通过,那么它就会引发错误,但是我忘记了“gets”方法将所有内容转换为字符串。
exercise_list = []
loop do
exercise_input = gets.strip.capitalize
if exercise_list.include?(exercise_input) == false && exercise_input.is_a?(Integer) == false
exercise_list << exercise_input
p exercise_input.class
else exercise_input == "quit"
break
end
end
答:
0赞
Siim Liiser
3/30/2022
#1
返回自的值始终是一个字符串。即使输入“1”,它也只是字符串“1”。检查它是否总是假的。exercise_input
gets.strip.capitalize
.is_a?(Integer)
这就是它不起作用的原因,但是,让它工作取决于您的要求。什么是整数?
“1”显然是,但是“1 2”、“1 a”、“1”、“1”、“1.1”、“1,1”、“0x1a”、“01”呢?
如果你想让 ruby 为你做决定,你可以尝试通过调用将其转换为整数,如果它不是整数,则可以挽救错误。Integer(exercise_input)
否则,我建议您使用正则表达式来检查字符串是否包含您想要的内容。
0赞
Fabio Fiestas
4/25/2022
#2
在处理字符串时,正则表达式会非常有帮助。 因此,您有一个始终是字符串的输入。例如。“asd12” 所以你可以问字符串里面是否有数字,如果有,你传递给下一个输入,如果没有,你把它附加到数组中。
在 elseif 语句中,您询问是否存在与任何数字 (/\d/) 匹配的问题,如果有,则传递到下一次迭代。
这是一个网站,您可以在其中练习正则表达式:www.rubular.com
这是我的代码
exercise_list = []
loop do
print ">. "
exercise_input = gets.strip.capitalize
if exercise_input == 'Quit'
break
elsif exercise_input.match?(/\d/)
next
else
exercise_list << exercise_input
end
end
pp exercise_list
我希望它对您有所帮助。
PD. print (“>. ”) 它只是为了可视化
评论