验证整数上的字符串';s输入,Ruby
我正在用Ruby进行一些练习,我想处理年龄的输入,例如,如果有人键入“11”而不是11,我想显示一条消息,这个人知道他/她不能使用字符串 这是我的密码验证整数上的字符串';s输入,Ruby,ruby,string,validation,integer,Ruby,String,Validation,Integer,我正在用Ruby进行一些练习,我想处理年龄的输入,例如,如果有人键入“11”而不是11,我想显示一条消息,这个人知道他/她不能使用字符串 这是我的密码 saludo = "Hola ¿Como te llamas?" puts saludo STDOUT.flush #STDOUT es una constante global que almacena las salidas del programa. flush vacía cualquier dato almacenado, y por
saludo = "Hola ¿Como te llamas?"
puts saludo
STDOUT.flush
#STDOUT es una constante global que almacena las salidas del programa. flush vacía cualquier dato almacenado, y por lo tanto, limpiará cualquier resultado anterior.
nombre = gets
STDOUT.flush
puts "Entonces te llamas #{nombre}"
puts "¿Cuantos años tienes?"
edad = Integer(gets.chomp)
#gets.chomp elimina el /n de gets
#El .to_i pasa el String a Integer
if edad > 0
if edad >= 18
puts "Eres mayor de edad, puedes votar y esas cosas"
else
puts "Tienes que moverte con el permiso de tus padres."
end
else
puts "prueba"
end
执行Integer(gets.chomp)
时,如果gets.chomp
不是严格意义上的整数字符串(即1、2、-12等),则会引发错误
所以你可以这样做:
input_string = gets.chomp
edad = nil
begin
edad = Integer(input_string)
rescue
puts "#{input_string} is not an integer"
end
# edad will still be nil if there was a problem
执行Integer(gets.chomp)
时,如果gets.chomp
不是严格意义上的整数字符串(即1、2、-12等),则会引发错误
所以你可以这样做:
input_string = gets.chomp
edad = nil
begin
edad = Integer(input_string)
rescue
puts "#{input_string} is not an integer"
end
# edad will still be nil if there was a problem
如果您使用的是
gets
,并且希望收到一个数字,将其解析为整数,那么您可以通过使用gets的方式“跳过”chomp
,因此,您可以检查操作后的edad
是否为0edad.zero?
,并以这种方式显示消息:
puts '¿Cuantos años tienes?'
edad = gets.to_i
if edad.zero?
puts 'Debes ingresar un número'
end
您可以将edad
初始化为0,然后使用until
创建一个循环,要求用户输入一个数字,因此,当edad
取非零值时,代码将从until
循环中输出,您可以通过下一步:
edad = 0
until !edad.zero?
puts '¿Cuantos años tienes?'
edad = gets.to_i
if edad.zero?
puts 'Debes ingresar un número'
end
end
puts edad
如果您使用的是
gets
,并且希望收到一个数字,将其解析为整数,那么您可以通过使用gets的方式“跳过”chomp
,因此,您可以检查操作后的edad
是否为0edad.zero?
,并以这种方式显示消息:
puts '¿Cuantos años tienes?'
edad = gets.to_i
if edad.zero?
puts 'Debes ingresar un número'
end
您可以将edad
初始化为0,然后使用until
创建一个循环,要求用户输入一个数字,因此,当edad
取非零值时,代码将从until
循环中输出,您可以通过下一步:
edad = 0
until !edad.zero?
puts '¿Cuantos años tienes?'
edad = gets.to_i
if edad.zero?
puts 'Debes ingresar un número'
end
end
puts edad
我总是这样做的。向
String
类中添加一个方法来进行检查,使事情变得更加简单
class String
def is_i?
!!Integer(self)
rescue ArgumentError, TypeError
false
end
end
puts "1".is_i?
puts "asda".is_i?
有些人可能不喜欢它,因为它使用了异常,但我认为它很好。我一直都是这样做的。向
String
类中添加一个方法来进行检查,使事情变得更加简单
class String
def is_i?
!!Integer(self)
rescue ArgumentError, TypeError
false
end
end
puts "1".is_i?
puts "asda".is_i?
有些人可能不喜欢它,因为它使用异常,但我认为它很好。input=gets.chomp
if input != "0" && input.to_i == 0
puts "Invalid age format. Integer expected"
else
age = input.to_i
end
input=gets.chomp
if input != "0" && input.to_i == 0
puts "Invalid age format. Integer expected"
else
age = input.to_i
end
如果要检查输入的数据类型,可以使用以下方法:
input = gets.chomp
input.class == Fixnum
由于ruby中的每个输入都被视为字符串,因此可以使用to_i
将输入转换为整数,如:
input = gets.to_i
检查输入值是否为0,这是转换为整数的字符串的默认值,如下所示:
if input == 0
puts("Please enter an integer")
如果要检查输入的数据类型,可以使用以下方法:
input = gets.chomp
input.class == Fixnum
由于ruby中的每个输入都被视为字符串,因此可以使用to_i
将输入转换为整数,如:
input = gets.to_i
检查输入值是否为0,这是转换为整数的字符串的默认值,如下所示:
if input == 0
puts("Please enter an integer")
更红宝石的方式
使用允许您将输入与字符串范围进行比较的
#age.rb
loop do
puts 'Enter age'
case gets.chomp
when /\D/
puts 'Digits only, try again', '======================'
when '0'..'17'
puts 'too young'
break
when '18'..'120'
puts 'old enough'
break
else
puts 'Invalid age, try again', '======================'
end
end
使用可确保您继续向用户请求输入,直到他们输入有效年龄。有效年龄在大小写表达式中定义为0-120
。如果输入了有效的年龄,循环将以break
中断
运行代码
$ruby age.rb
进入年龄
十一
#仅限数字,请重试
#======================
进入年龄
10000
#无效年龄,请重试
#======================
进入年龄
5.
#太年轻
$ruby vote.rb
进入年龄
35
#够大了
一种更加Ruby的方式
使用允许您将输入与字符串范围进行比较的
#age.rb
loop do
puts 'Enter age'
case gets.chomp
when /\D/
puts 'Digits only, try again', '======================'
when '0'..'17'
puts 'too young'
break
when '18'..'120'
puts 'old enough'
break
else
puts 'Invalid age, try again', '======================'
end
end
使用可确保您继续向用户请求输入,直到他们输入有效年龄。有效年龄在大小写表达式中定义为0-120
。如果输入了有效的年龄,循环将以break
中断
运行代码
$ruby age.rb
进入年龄
十一
#仅限数字,请重试
#======================
进入年龄
10000
#无效年龄,请重试
#======================
进入年龄
5.
#太年轻
$ruby vote.rb
进入年龄
35
#够大了
不是我写的吗?我只是看到你没有提到FixedNum部分。为了完整起见,我添加了下一个检查。没有抄袭你的答案:)啊,我明白了,对不起!不是我写的吗?我只是看到你没有提到FixedNum部分。为了完整起见,我添加了下一个检查。没有抄袭你的答案:)啊,我明白了,对不起self==self.to_i.to_s
可能不那么凌乱。没错。这真的取决于什么是可接受的。我创建的方法将(应该)接受任何有效的整数文本,我认为这是理想的。我不确定是否真的有另一种直接的方法来做到这一点。正则表达式也是一种有效的方法(事实上,可能更好),但是,嗯,足够好了。通常我倾向于使用正则表达式,但允许使用多少位数?10? 100? 十亿?Ruby的bignum系统将尝试容纳几乎任何东西。例如,试试Integer('9'*1e6)
。self==self.to\u i.to\u s
可能不那么凌乱。没错。这真的取决于什么是可接受的。我创建的方法将(应该)接受任何有效的整数文本,我认为这是理想的。我不确定是否真的有另一种直接的方法来做到这一点。正则表达式也是一种有效的方法(事实上,可能更好),但是,嗯,足够好了。通常我倾向于使用正则表达式,但允许使用多少位数?10? 100? 十亿?Ruby的bignum系统将尝试适应