脚本赢得';t在Python3.0中运行

脚本赢得';t在Python3.0中运行,python,python-3.x,Python,Python 3.x,此脚本将按预期运行,并在Python 2.6中无任何错误地通过doctests: def num_even_digits(n): """ >>> num_even_digits(123456) 3 >>> num_even_digits(2468) 4 >>> num_even_digits(1357) 0 >>> num_even_

此脚本将按预期运行,并在Python 2.6中无任何错误地通过doctests:

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()
在Python3.0中,这是输出:

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

我试过运行Python脚本“2to3”,但它说不需要任何更改。有人知道为什么脚本不会在Python 3中运行吗?

我猜您需要
n/=10
而不是
n/=10
。换句话说,您希望明确指定整数除法。否则
1/10
将返回
0.1
,而不是
0
。请注意,
/=
也是有效的Python2.x语法(我想从2.3版开始…。

我认为这可能是因为Python2.x中的运算符“/”返回整数结果,而Python3.x中的运算符“/”返回浮点。尝试将“/”更改为“/”。“//=”返回Python 3.x中的整数结果,方法与Python 2.x中的“//=”相同。

现在,对于完全不同的内容:

count = 0
while n:
   n, digit = divmod(n, 10)
   count += ~digit & 1

为了在2.x中使用
/=
语法(并替换
/=
默认值),必须包括
from未来导入分部
@Andrew-
from未来导入分部
仅更改默认的
/
操作符所做的操作,
/
操作符已经存在很长时间了,不需要来自未来导入部分的
10//2
-->
5
甚至可以追溯到python 2.2(这是我目前使用的最古老的解释器)。@Andrew,一半对一半错:没有导入,默认值保持不变(
/
整数之间的截断,如
/
),但是
/=
在导入或不导入的情况下仍然可以很好地工作。作为更好的实现,def num_偶数(n):return len(filter(lambda x:(int(x)%2)=0,str(n))?伙计,空格有什么问题吗?您已经利用了几乎所有可能的机会来消除脚本中的错误。