简单的数学不在python中累加For循环

时间:2017-12-20 22:58:38

标签: python python-3.x

这是我的代码:

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

中的浮点数之间的区别

2 个答案:

答案 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