On 10/27/07, Dick Moores <[EMAIL PROTECTED]> wrote: > > Win XP, Python 2.5.1 > > ======================== > #!/usr/bin/env python > #coding=utf-8 > > n = 10000000000 # 10 billion > print "type of 10 billion is", type(n) > n = 1000000000 # 1 billion > print "type of 1 billion is", type(n) > > raw_input("press enter to continue") > > n = 10000000000 > print type(n) > while True: > if type(n) == long: > n -= 1000000 > print n, type(n) > else: > break > print n > print type(n), 'HERE' > ========================== > > As an exercise in using type() I was thinking I could use it to begin > to find where (without looking it up) a long becomes an int. I show > that the boundary is somewhere between 10 billion and 1 billion. But > the above script never ends--never gets to 'HERE'. > > Here's part of the output: > > 6000000 <type 'long'> > 5000000 <type 'long'> > 4000000 <type 'long'> > 3000000 <type 'long'> > 2000000 <type 'long'> > 1000000 <type 'long'> > 0 <type 'long'> > -1000000 <type 'long'> > -2000000 <type 'long'> > -3000000 <type 'long'> > -4000000 <type 'long'> > -5000000 <type 'long'> > -6000000 <type 'long'> > > Note that it shows even 1 million and 0 to be longs, whereas > >>> type(1000000) > <type 'int'> > >>> type(0) > <type 'int'> > >>> > > What's going on? > > Thanks, > > Dick Moores > > _______________________________________________ > Tutor maillist - Tutor@python.org > http://mail.python.org/mailman/listinfo/tutor >
Hi Dick, I would expect that a type change will happen if there is a need. Hence if type(n) is already long it does not have to get converted to int to accommodate something small. I changed your program to increase from 1B to 10B and the results are as expected :) <snip> - your old code n = 1000000000 # 1 billion print type(n) while n < 10000000000 : # 10 billion if type(n) == int: n += 1000000 print n, type(n) else : break <snip> - your old code HTH Aditya
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor