Hello, You're using range objects in ways that were hardly intended. If range objects had to be magically smart about everything, the language would be slower overall just to enable a questionable use case.
Plain comparison operators and isinstance or type checks against int will make your life a lot easier in this case: >>> a = .1 >>> type(a) is int and 0 <= a < 20**30 False Vitor ----- Mensaje original ---- > De: Owolabi Abdulkareem <[EMAIL PROTECTED]> > Para: python-3000@python.org > Enviado: martes, 18 de noviembre, 2008 12:01:35 > Asunto: [Python-3000] could range be smarter? > > Hello , > I'm not really a programmer but I am working to be one > > I just thought may be this is worth considering for future enhancement > with python's range > > I've you considered trying out something of these nature with range: > > />>> 9000000 in range(20**30)/ > > you'll have to wait for sometime to get a response but if you try > something like this > > />>> 900000.7 in range(20**30) > > /or even > > />>> 0.1 in range(20**30)/ > > range iterates through till the end before it gives you a response. It > is clear that a float could not be in the above range and /0.1/ is less > than a unit integer, why do the function /range /*have to iterate > through till the end* wasting CPU resource when it is clear that it is > not in the range. > > To avoid this ,I have to /type check /and test if the number is an > integer and not a float . > > Failure to do this would lead to my program to freeze until the > iteration is done. This makes range inefficient and one would have to > remember this for it does not do the job of checking for you or/ and if > a step is included in the range I have to test it with % operator: > > Putting this in a function: > / > def Inrange(begin,end,step,number): > index=0 # Here is where the index of the number is placed if is in range > for i in begin,end,step,number: > if type(i) == type(int(i)): #Check to see all that parameters > are all integers > pass > else: > return 'All parameters must be integers' > try: #check > to see if parameters are appropriate to produce a true range > if (begin < end and step>0): > assert(begin <= number < end) > elif begin > end and step < 0: > assert(begin >= number > end) > else: > raise AssertionError > > except AssertionError: > > return 'Check your parameters ;range between them is not > executable' > if (number - begin)%step != 0: > return 'Your number is not in range' > else: > index=(number - begin) // step > > return (True,index) > / > (I'm sorry about my code; any correction will be educating) > > Ruby's range does the comparing check but gives an erroneous 'True' with > > /(0 .. 20*30) include? 7.7482/ > > Where 7.7482 is a float ( and should not be found in a range of integers) > > I think it would be nice (and more efficient for there won't be a need > to iterate through for this) if we could do this: > / > >>> 7.7483 in range(20**30) > Traceback (most recent call last): > File "", line 1, in > 7.7483 range(20**30) > TypeError: 'float' object cannot be in a range of integers > > >>> 622168 in range(20**30,8) > (True, 77770) > > >>> 1219 in range(-181,20**30,8) > (True, 175) > > >>> range(-181,20**30,8)[175] > 1219 > > >>> list(range(-181,20**30,8)).index[1219] # as in index = (number - > begin) // step > 175/ > > In python 3.0 range(-181,20**30,8) gives: > / > Traceback (most recent call last): > File "", line 1, in > list(range(20**20)).index(20) > OverflowError: Python int too large to convert to C ssize_t/ > > I believe this simple mathematical expression in the function above > could be used to avoid iteration for this and > go past this OverflowError (with some initial test similar to that in > the function 'Inrange' above): > / > number = index*step + begin > index = (number - begin) // step #making index the subject of formul/a > > I don't know if something could be done about this now ( or if it is > really a good idea) especially when python 3000 is in its rc2 but I > thought I should say something on this. > > > Yours > > Abdulkareem Owolabi > _______________________________________________ > Python-3000 mailing list > Python-3000@python.org > http://mail.python.org/mailman/listinfo/python-3000 > Unsubscribe: > http://mail.python.org/mailman/options/python-3000/algorias%40yahoo.com ____________________________________________________________________________________ ¡Todo sobre Amor y Sexo! La guía completa para tu vida en Mujer de Hoy. http://mujerdehoy.telemundo.yahoo.com/ _______________________________________________ Python-3000 mailing list Python-3000@python.org http://mail.python.org/mailman/listinfo/python-3000 Unsubscribe: http://mail.python.org/mailman/options/python-3000/archive%40mail-archive.com