基本上,问题是打印从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
答案 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...