defn noob wrote:
isPrime works when just calling a nbr but not when iterating on a
list, why? adding x=1 makes it work though but why do I have to add
it?
Is there a cleaner way to do it?


def isPrime(nbr):
    for x in range(2, nbr + 1):
        if nbr % x == 0:
            break
    if x == nbr:
        return True
    else:
        return False

[isPrime(y) for y in range(11)]

Traceback (most recent call last):
  File "<pyshell#45>", line 1, in <module>
    [isPrime(y) for y in range(11)]
  File "C:\Python25\Progs\blandat\myMath.py", line 9, in isPrime
    if x == nbr:
UnboundLocalError: local variable 'x' referenced before assignment


map(isPrime, range(100))

Traceback (most recent call last):
  File "<pyshell#38>", line 1, in <module>
    map(isPrime, range(100))
  File "C:\Python25\Progs\blandat\myMath.py", line 9, in isPrime
    if x == nbr:
UnboundLocalError: local variable 'x' referenced before assignment
isPrime(10)
False
isPrime(11)
True



adding x=1 makes it work though:

def isPrime(nbr):
    x=1
    for x in range(2, nbr + 1):
        if nbr % x == 0:
            break
    if x == nbr:
        return True
    else:
        return False


[isPrime(y) for y in range(11)]
[False, True, True, True, False, True, False, True, False, False,
False]
--
http://mail.python.org/mailman/listinfo/python-list


========================================
Yep - "local variable 'x' referenced before assignment" is correct.
You state: for x in range... but x doesn't exist until initialized.
  To save a loop, initialize x=2 (the minimum value) and loop executes
  on pass one.
In a straight 'C' program
  (  for (x=1, x=(nbr+1), x++)  etc...  )
  the x is initialized and forceably incremented.
  seems Python does not auto initialize but does auto increment.


Steve
[EMAIL PROTECTED]
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to