Robert Klemme
2/12/2008 7:36:00 AM
2008/2/12, Morton Goldberg <m_goldberg@ameritech.net>:
> On Feb 11, 2008, at 7:24 AM, Robert Klemme wrote:
>
> > 2008/2/11, Ashley Wharton <ashleywnj@gmail.com>:
> >> ...
> >
> >> With further help from Kastner:
> >>
> >> MAX = 100000
> >>
> >> def get_number(prompt = "")
> >> print prompt
> >> # ruby methods return the last value
> >> gets.to_i
> >> end
> >>
> >> def print_from_to(start, stop)
> >> start.upto(stop) do |number|
> >> puts number
> >> end
> >> end
> >>
> >> loop do
> >> number = get_number "Please enter a number less than #{MAX}: "
> >> next if number >= MAX
> >> print_from_to(number, MAX)
> >> break
> >> end
> >
> > As far as I can see you logic is: read user input until it is valid
> > and then print from input to MAX. I would remove the printing from
> > the loop because that is much cleaner.
>
> I interpret Robert as saying that he prefers something like:
>
> <code>
> #! /usr/bin/env ruby -w
>
> MAX = 100_000
>
> def get_number(prompt = "")
> print prompt
> gets.to_i
> end
>
> def print_from_to(start, stop)
> start.upto(stop) { |number| puts number }
> end
>
> number = MAX
> while number >= MAX
> number = get_number "Please enter a number less than #{MAX}: "
> end
> print_from_to(number, MAX)
> </code>
>
> So do I.
Actually I would have formulated it a bit different, i.e. applied the
loop check after reading:
#! /bin/env ruby
MAX = 100_000
def get_number(prompt = "")
print prompt
gets.to_i
end
def print_from_to(start, stop)
start.upto(stop) { |number| puts number }
end
begin
number = get_number "Please enter a number less than #{MAX}: "
end until (0...MAX).include? number
# alternative in one line:
# number = get_number "Please enter a number less than #{MAX}: " until
(0...MAX).include? number
print_from_to(number, MAX)
Kind regards
robert
--
use.inject do |as, often| as.you_can - without end