Re: ruby idiom for python's for/else while/else



Hi --

On Tue, 20 Sep 2005, Jeremy Tregunna wrote:


On 19-Sep-05, at 7:15 PM, Gergely Kontra wrote:

Hi!

Is there a similar construct to python's:

for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print n, 'equals', x, '*', n/x
...             break
...     else:
...         # loop fell through without finding a factor
...         print n, 'is a prime number'
...
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

Directly, yes; though hardly anybody writes code this way (at least I've never seen anybody write something like this, like how I'm about to give it to you). I'd see William Morgan's message for a better suggestion.


for n in (2..10) do
 for x in (2..n) do

You'd want the ... range operator, so as to exclude the upper limit.

   if n % x == 0
     puts "#{n} equals #{x} * #{n/x}"
     break
   else
     puts "#{n} is a prime number"
   end
 end
end

Have you run it? :-) It doesn't work the same way; it prints "...prime number" for *every* time a match isn't found, until a match is found. So, for example, you get:

7 is a prime number  # printed 5 times (2,3,4,5,6)
8 equals 2 * 4
9 is a prime number
9 equals 3 * 3


David

--
David A. Black
dblack@xxxxxxxxxxxx


.



Relevant Pages


Loading