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