为什么我的代码在python 2.7上正常工作但是没有输出python 3.4?

时间:2015-08-28 06:42:19

标签: python python-2.7 python-3.x

基本上,问题是打印从1到1000的所有数字,其中数字的平方仅由偶数组成(例如:932 ** 2 = 868624,所有数字均为偶数) 我确信我得到了算法,使用python 2.7正常工作,但是使用python 3.4失败了。看起来很奇怪。 无论如何,这是代码:

for x in range(1,1000): #x varies from 1 to 1000
    sq = x*x
    flag = True
    while sq != 0:
        if sq %2 != 0:    #everytime sq is divided by 10, result is even
            flag = False
            break
        sq /= 10
    if flag:
        print(x)
    x += 1

3 个答案:

答案 0 :(得分:1)

在Python 3.x中,/的结果为float,示例 -

>>> 868624/10
86862.4

在Python 2.x中,当/的两个操作数都是整数时,它会进行整数除法。

你需要做 -

sq //= 10

另外,正如评论中所建议的那样,在for循环结束时你不需要x+=1行,虽然这不会导致数字跳过,但它没用,你可以删除该行。

这是因为更改for循环中的x变量不会影响范围,for循环将从范围中获取下一个数字,并将其分配给x以进行下一次迭代。 / p>

答案 1 :(得分:1)

正如其他答案所说:使用//。但我想补充说明:

from __future__ import division

在文件的开头添加此行,它将在python 2.x和3.x中使分割具有相同的行为。当您想要编写2.x和3.x兼容程序时,它应该很有用。

<强>之前

python 2.x

>>> 3 / 2
1
>>> 3 // 2
1

python 3.x

>>> 3 / 2
1.5
>>> 3 // 2
1

<强>后

python 2.x&amp;&amp; python 3.x

>>> 3 / 2
1.5
>>> 3 // 2
1

答案 2 :(得分:0)

http://www.pythontutor.com/visualize.html#mode=display

显示问题在第8行.Python 3仅将/用于浮点除法,而是使用//

源; http://www.informit.com/articles/article.aspx?p=1439189

for x in range(1,1000):
    sq = x*x
    flag = True
    while sq != 0:
        if sq %2 != 0:
            flag = False
            break
        sq //= 10 # <-- here
    if flag:
        print(x)
    x += 1

现在,输出应该如下所示:

    2   
    8
    20
    22...