While Statement

Andre Engels andreengels at gmail.com
Fri May 22 05:34:18 EDT 2009


On Fri, May 22, 2009 at 11:17 AM, Joel Ross <joelc at cognyx.com> wrote:
> Hi all,
>
> I have this piece of code
>
> class progess():
>
>    def __init__(self, number,  char):
>
>        total = number
>        percentage = number
>        while percentage > 0 :
>            percentage = int(number/total*100)
>            number-=1
>            char+="*"
>            print char
>
> progess(999,  "*")
>
> Just wondering if anyone has any ideas on way the percentage var gets set to
> the value 0 after the first loop.
>
> Any feed back would be appreciated.

In Python 2.6 and lower, division of two integers gives an integer,
being the result without rest of division with rest:

>>> 4/3
1
>>> 5/3
1
>>> 6/3
2
>>>

In your example, the second run has number = 998, total = 999. 998/999
is evaluated to be zero.

There are two ways to change this:
1. Ensure that at least one of the things you are using in the
division is a float. You could for example replace "total = number" by
"total = float(number)" or "number/total*100" by
"float(number)/total*100" or by "(number*100.0)/total".
2. Use Python 3 behaviour here, which is done by putting the import
"from __future__ import division" in your code.


-- 
André Engels, andreengels at gmail.com



More information about the Python-list mailing list