Logesh Pillay wrote: [snip]
Consider a program I've just translated into python from my version in C.
def erdos(n):
global found # added line
found, r, s = False, 1, [0]*1000 def choose (d, k):
global found # added line
for i in -1, 1: s[d] = i
if d < r:
choose (d+1, k - i*d*d)
elif k == i*d*d:
found = True
printout ()
def printout ():
print n, '=',
for i in range (1, r+1):
if s[i] == 1:
print '+', i,'.',i,
else:
print '-',i,'.',i,
print '\n'
while not found:
choose(1, n)
r += 1
The program is supposed to return to the python prompt as soon as it finds solution(s) at the smallest width r.
I entered it exactly as it is expecting the same sort of error message for the boolean variable 'found'. There was none. Instead python simply fails to perform 'found = True' in choose() and it just keeps running (incidentally demonstrating the other part of this Erdos theorem that the no. can be so expressed in an infinite number of ways). Why the inconsistency in handling enclosing scope variables of type 'int' and 'bool'? Also, it can't be desirable that the interpreter effectively ignores a line of code without warning.
Logesh _______________________________________________
Just add two global statements as written above and it will work just as you would have expected it to!
André
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor