On Mon, 2008-05-12 at 14:08 -0400, "Simón A. Ruiz" wrote: > I'll try my hand at this: > > The outside for loop is looking through every number up to the variable > "number". No quarrel here. > > For each of those numbers, it checks to see if any number between 2 and > i is divisible into i. If it finds anything, we know it's not a prime, > and so it breaks out of that second loop without completing it, which > means the else block isn't executed.
This is where I am getting lost. When the variable 'number' is 3, it means that in that instance the inner 'for' statement will be 'for j in range(2,3)', hmmm which means that we will be dividing each element by 2 in the first 'for' statement and checking whether it is true , no? But 2%2 is zero, so, in my warped logic, the inner 'for' loop should break and the else clause will not execute! > > If it can't find anything that i is divisible by, then that inside for > loop finishes without breaking, we know that i is a prime number, and > the "else" clause is executed. This is where it gets even more interesting for me. Wont 'i' in one instance be 8, so at that particular moment there will be a 7 in the inner 'for' loop which will be divisible by one of our 'prime' numbers ie 7?! I know I am wrong but for some reason I cannot see the light! :-) > > range(2,2) is is an empty list, so the loops ends uneventfully without > doing anything and the else clause is executed. > > I'm not an expert, and this seems to me to be what's happening there. > > Simón All the same, thanks... > > kinuthia muchane wrote: > > Hi, > > > > I learnt that a loop can have an else clause. And that this clause > > executes when the loop TERMINATES. In a while loop when the condition > > becomes false, and in a for loop when a sequence is exhausted. When I > > write the following code it seems to work: > > > > for n in [1,2,3,4,5]: > > print 'we are in the loop',n > > else: > > print 'we are now EXITING the loop',n > > > > which results in: > > > > we are in the loop 1 > > we are in the loop 2 > > we are in the loop 3 > > we are in the loop 4 > > we are in the loop 5 > > we are now EXITING the loop 5 > > > > Or: > > > > n = 1 > > while n <= 5: > > print 'we are in the loop',n > > n += 1 > > else: > > print 'we are now EXITING the loop',n > > > > ...which gives: > > > > we are in the loop 1 > > we are in the loop 2 > > we are in the loop 3 > > we are in the loop 4 > > we are in the loop 5 > > we are now EXITING the loop 6 (it spills over here!) > > > > This has served to confuse me more. Would someone please kindly explain > > how all this fits into the code below which searches (and finds!) for > > prime numbers... > > > > > > def prime(): > > number = int(raw_input("Enter a number :")) > > for i in range(2,number): > > for j in range(2,i): > > if i%j == 0: > > break > > else: > > print i, "is a prime number" > > prime() > > > > ...especially in the instance when number is 2 in the first for > > statement, for then we will have for j in range(2,2)! Or what is going > > on?? > > > > Thanks, > > Kinuthia... > > > > > > _______________________________________________ > > Tutor maillist - Tutor@python.org > > http://mail.python.org/mailman/listinfo/tutor _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor