这是我的代码:
x = 20
for i in range(1,7):
y = x/i
print(i) # These lines are just to show what
print(y) # the code is doing. I know it's not elegant.
print(i*y) # And is not my final solution
print('\n')
这是我的输出:
1
20.0
20.0
2
10.0
20.0
3
6.666666666666667
20.0
4
5.0
20.0
5
4.0
20.0
6
3.3333333333333335
20.0
那么为什么每个方程的答案都相同(20)?当i
明显改变时?比如第三次迭代,当i=3
进入翻译并执行3*(20/3)
时,正确而不是20,所以我不确定发生了什么。
以下是这个问题。 python2.7和python3
中的浮点数之间的区别答案 0 :(得分:1)
在Python 2.x中/
执行整数除法,导致你期望的结果:
$ python
Python 2.7.12 (default, Nov 20 2017, 18:23:56)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x=20
>>> [x/i for i in range(1,7)]
[20, 10, 6, 5, 4, 3]
>>> [x/i*i for i in range(1,7)]
[20, 20, 18, 20, 20, 18]
但是在Python 3中,/
执行适当的浮点除法,因此结果在数学上是正确的:
$ python3
Python 3.5.2 (default, Nov 23 2017, 16:37:01)
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> x=20
>>> [x/i for i in range(1,7)]
[20.0, 10.0, 6.666666666666667, 5.0, 4.0, 3.3333333333333335]
>>> [x/i*i for i in range(1,7)]
[20.0, 20.0, 20.0, 20.0, 20.0, 20.0]
确保选择所需的解释器并执行所需的操作。记住:明确比隐含更好!因此,正如其他人指出的那样,只需调用//
进行整数除法。
答案 1 :(得分:1)
如果您对解释器输出与代码结果之间存在差异感到好奇,我猜您在运行.py文件时运行两个不同版本的python:python3,而python2作为您的解释器
这是我使用python3时的输出:
/usr/local/bin$ python3
Python 3.6.4
>>> print(3 * (20/3))
20.0
当我使用python2时,这是我的输出:
/usr/local/bin$ python
Python 2.7.13
>>> print(3 * (20/3))
18