[Tutor] Doubt in for loop

antipode0 antipode0 at gmail.com
Thu Apr 4 05:34:10 CEST 2013


I believe Dave answered the OP's intended question.
On Apr 3, 2013 9:54 PM, "Dave Angel" <davea at davea.name> wrote:

> 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
> ______________________________**_________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/**mailman/listinfo/tutor<http://mail.python.org/mailman/listinfo/tutor>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20130403/b3d35915/attachment-0001.html>


More information about the Tutor mailing list