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