Real newbie question about methods

Hi all. I’m trying to learn ruby using about 5 books(!) but keep
struggling over basic things that are obvious to you guys but don’t
seem to be explained in a way my brain understands. Ruby is my first
programming language, by the way. Here is first one.

I have written this script (which works fine):-

target = 18…30
print 'please enter your age: ’
age = gets.chomp.to_i
if age < 18
puts ‘sorry, too young.’
elsif target === age
puts ‘have a great holiday.’
elsif age > 31
puts ‘sorry, too old.’
end
gets

What I want to do is put this in a method:-

def check_age(age)
print "Please enter your age: "
age = gets.chomp.to_i
eligible = 18…30

if age < 18
print “Sorry, too young.”
elsif eligible === age
print “Have a great holiday!”
else
print “Input not understood.”
check_age(age) # trying recursion here
end
check_age()
end

But it doesn’t work. How do I get the value entered by the user into
the method parameter?

Many thanks

On 7/10/06, simonh [email protected] wrote:

else
Many thanks

Probably something like:

def check_age(age)
eligible = 18…30
if age < 18
print “Sorry, too young.”
elsif eligible === age
print “Have a great holiday!”
true # provide a positive result
else
print “Input not understood.”
end
end

print "Please enter your age: "
check_age(gets.chomp.to_i)

of course I would use a case

make eligble a constant

and if required provide the flow control (probably not recursive) in

another function

Good luck
pth

simonh [email protected] wrote:

But it doesn’t work. How do I get the value entered by the user into
the method parameter?

def check_age
print "Please enter your age: "
age = gets.chomp.to_i
eligible = 18…30

if age < 18
print “Sorry, too young.”
elsif eligible === age
print “Have a great holiday!”
else
print “Input not understood.”
check_age # trying recursion here
end
end

check_age

works fine

On Jul 10, 2006, at 10:40 AM, simonh wrote:

print "Input not understood."

check_age(age) # trying recursion here
end
check_age()
end

you don’t want recursion.

def check_age(age)
eligible = 18…30
if age < 18
print “Sorry, too young.”
elsif eligible === age
print “Have a great holiday!”
else
print “Input not understood.”
end
end

print "Please enter your age: "
age = gets.chomp.to_i
check_age(age)

– Elliot T.

Thanks Une bévue

It seems I didn’t need the parameter to the method. Also forgot to add
the second elsif (to check if too old). If I run the program and type
‘a’ instead of a two digit number the first if statement gets printed -
‘sorry too young’

what i want is for the else statement to be run if user input is not
entered as two digits. How would I do this? Somehow got to check if
gets recieves an integer of two digits.

thanks again

On Jul 10, 2006, at 11:15 AM, simonh wrote:

gets recieves an integer of two digits.
use regex. if they enter a number it will match /\d+/

– Elliot T.

On Jul 10, 2006, at 11:33 AM, Elliot T. wrote:

‘sorry too young’

what i want is for the else statement to be run if user input is not
entered as two digits. How would I do this? Somehow got to check if
gets recieves an integer of two digits.

use regex. if they enter a number it will match /\d+/

umm better use anchors to be sure they only enter a number

/^\d+$/ if i recall correctly

– Elliot T.

You can add a regular expression to see if you age is valid like this:

/-----------------------------------------------------------------/
valid = /\d{2}/ #checks for exactly 2 digits
if valid.match(age)

else
puts “Invalid entry”
end

/-----------------------------------------------------------------/
Hope this helps.

_Steve

One correction: make age a string (.to_s) if you want to use the regexp

_<

I think Une’s code is cleaner overall.

_Steve

[email protected] removed_email_address[email protected] wrote:

valid = /\d{2}/ #checks for exactly 2 digits

this woundn’t help because of gets.chomp returns always strings and
gets.chomp.to_i returns Fixnum with 0 in case of any alpha betic char in
gets…

On Jul 10, 2006, at 12:00 PM, Une bévue wrote:

[email protected] [email protected] wrote:

valid = /\d{2}/ #checks for exactly 2 digits

this woundn’t help because of gets.chomp returns always strings and
gets.chomp.to_i returns Fixnum with 0 in case of any alpha betic
char in
gets…

so check the regex before the to_i

need anchors though or “hi24” will pass

– Elliot T.

Agreed that the regexp wouldn’t work for your code. I would have
written it like this (like I said before your code is cleaner)

def check_age
print "Please enter your age: "
age = gets.chomp
target = 18…30
valid = /\d{2}/

if valid.match(age)
if target === age.to_i
puts ‘Have A Nice Holiday’
elsif age.to_i < 18
puts ‘Too Young’
elsif age.to_i > 30
puts ‘Too Old’
end
else
puts “Usage: <18…30>”
check_age # Try again
end
end

check_age

_Steve

simonh [email protected] wrote:

It seems I didn’t need the parameter to the method. Also forgot to add
the second elsif (to check if too old). If I run the program and type
‘a’ instead of a two digit number the first if statement gets printed -
‘sorry too young’

what i want is for the else statement to be run if user input is not
entered as two digits. How would I do this? Somehow got to check if
gets recieves an integer of two digits.

def check_age
print "Please enter your age: "
age = gets.chomp.to_i
eligible = 18…30

if age == 0
print “Please enter a two digits number in « 18…30 ».”
check_age
elsif eligible === age
print “Have a great holiday!”
else age < 18
print “Sorry, too young.”
end
end

check_age

the “gets.chomp.to_i” returns 0 when only alphabetic chars. ie :

“toto” => 0

or :

“blahblah27yyyiyiyiyui” => 0

Go for it. We’re here to help >_<

[email protected] wrote:

if target === age.to_i

end

check_age

_Steve

thanks Steve, I like that. a nested if that checks against a rexexp
first. mind if I add it to my Library Of Useful Code Samples For When I
Get Stuck?

thanks for all the help everyone. things that were dark are now much
lighter.

This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.

| Privacy Policy | Terms of Service | Remote Ruby Jobs