[基本上,视频的教授正在测试完全相同的基本代码,但是他的一个是打印出来的" Odd"而我的python程序被打印出来了#34; Even"哪个应该打印"偶数"为什么在使用完全相同的代码时打印的方式不同?
视频链接位于https://youtu.be/Pij6J0HsYFA?t=1942] 1
x = 15
if (x/2)*2 == x:
print('Even')
else: print('Odd')
答案 0 :(得分:5)
整数除法在Python 2.7和Python 3.X中表现不同。
C:\Users\Kevin\Desktop>py -2
Python 2.7.11 (v2.7.11:6d1b6a68f775, Dec 5 2015, 20:32:19) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 15/2
7
>>> (15/2)*2
14
>>> ^Z
C:\Users\Kevin\Desktop>py -3
Python 3.5.1 (v3.5.1:37a07cee5969, Dec 6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 15/2
7.5
>>> (15/2)*2
15.0
>>>
教授可能正在使用2.7,你可能正在使用3.X。
在任何情况下,使用模数来检查数字的均匀性要好得多,因为它不依赖于特定于版本的行为。
>>> def is_even(x):
... return x%2 == 0
...
>>> is_even(15)
False
>>> is_even(16)
True
>>> is_even(17)
False
答案 1 :(得分:1)
区别在于Python2和Python3。
在Python 3.0中,5/2将返回2.5。在Python2中相同将生成2。
前者是floating point division and other integer division.
在您提到的代码中,(15/2)*2 is 14 as 7
是作为底值而不是7.5(不等于15)生成的。因此,由于Odd
,它将打印python2
。
另一方面,由于浮点精度,您的代码将生成(15/2)*2 as 15
,并由于Even.
而显示python3
。
答案 2 :(得分:0)
因为讲师正在使用Py2,而你正在使用Py3。
在Python 2中,除以整数的结果是一个整数,它被截断:15 / 2 == 7
。自7 * 2 != 15
以来,讲师打印Odd
。
在Python 3中,如果需要保留实际值,则整数除以的结果是浮点数:15 / 2 == 7.5
,因此您打印Even
。
保留结果类型和底限的等效Py3操作是15 // 2 == 7
。