[Tutor] Doubt in for loop
Dave Angel
davea at davea.name
Thu Apr 4 04:53:15 CEST 2013
On 04/03/2013 09:53 PM, Steven D'Aprano wrote:
> On 04/04/13 12:29, bessenkphilip wrote:
>> Hi all,
>>
>> I'm having a doubt in the below program's 2n'd "for" loop.
>>
>>>>> 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
>>
>> My doubt is that "will 'x' be always of value 2, if so why that for
>> loop "for x in range(2, n):"
>> i don't know how the first output , as If 2%2==0:(this satisfies the
>> if loop as x =2) , so how the else part came to output i.e 2 is a
>> prime number.
>
> I'm sorry, I don't understand your question.
>
> x is *not* always of value 2. You can see with the last line,
>
> 9 equals 3 * 3
>
> x has value 3.
>
>
> The outer loop just checks 2, 3, 4, ... 9 to see whether they are prime.
> The inner loop actually does the checking:
>
>
> for x in range(2, n):
> if n % x == 0:
> print n, 'equals', x, '*', n/x
> break
>
>
> This tests whether n is divisible by 2, 3, 4, 5, 6, ... up to n-1. If n
> is divisible by any of those numbers, then n cannot be prime.
>
> For example, with n = 9, the inner loop does this:
>
> x = 2
> Test if 2 is a factor: does 9/2 have remainder zero? No.
> x = 3
> Test if 3 is a factor: does 9/3 have remainder zero? Yes.
> So 9 is not prime, and 9 = 3 * (9/3) = 3 * 3
>
>
> If we test it with n = 35, the inner loop would do this:
>
> x = 2
> Test if 2 is a factor: does 35/2 have remainder zero? No.
> x = 3
> Test if 3 is a factor: does 35/3 have remainder zero? No.
> x = 4
> Test if 4 is a factor: does 35/4 have remainder zero? No.
> x = 5
> Test if 5 is a factor: does 35/5 have remainder zero? Yes.
> So 35 is not prime, and 35 = 5 * (35/5) = 5 * 7
>
>
>
> Notice that this does more work than necessary! Can you see what work it
> does that is unnecessary?
>
> (Hint: what even numbers are prime?)
>
>
>
>
I don't understand the questions either, but I can point out one thing
that might be puzzling the OP:
When n is 2, the inner loop does nothing, it just skips to the else
clause. The reason is that range(2,2) is a null iterator. range(i,j)
produces values from i to j-1, or to put it another way values for which
i <= n < j
If i and j are identical, there's nothing to match it.
--
DaveA
More information about the Tutor
mailing list