This script will run as expected and pass doctests without any errors in Python 2.6:
def num_even_digits(n):
"""
>>> num_even_digits(123456)
3
>>> num_even_digits(2468)
4
>>> num_even_digits(1357)
0
>>> num_even_digits(2)
1
>>> num_even_digits(20)
2
"""
count = 0
while n:
digit=n%10
if digit%2==0:
count+=1
n/=10
else:
n/=10
return count
if __name__ == '__main__':
import doctest
doctest.testmod()
In Python3.0 this is the output:
**********************************************************************
File "/home/calder/My Documents/Programming/Python Scripts/ch06.py", line 3, in
__main__.num_even_digits`
Failed example:
num_even_digits(123456)
Expected:
3
Got:
1
**********************************************************************
File "/home/calder/My Documents/Programming/Python Scripts/ch06.py", line 5, in
__main__.num_even_digits
Failed example:
num_even_digits(2468)
Expected:
4
Got:
1
**********************************************************************
1 items had failures:
2 of 5 in __main__.num_even_digits
***Test Failed*** 2 failures.
I have tried running the Python script "2to3", but no changes are needed it says. Does anyone know why the script will not run in Python 3?
I'm guessing you need n //= 10
instead of n /= 10
. In other words, you want to explictly specify integer division. Otherwise 1 / 10
will return 0.1
instead of 0
. Note that //=
is valid python 2.x syntax, as well (well, starting with version ~2.3, I think...).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With