Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Script won't run in Python3.0

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?

like image 898
Blue5hift Avatar asked Nov 29 '22 18:11

Blue5hift


1 Answers

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...).

like image 139
Joe Kington Avatar answered Dec 06 '22 16:12

Joe Kington