问题:编写一个Python函数square,它接受一个数字并返回该数字的平方。
此函数接收一个数字并返回一个数字。
代码:
def square(x):
'''
x: int or float.
'''
我的代码:
def square(x):
'''
x: int or float.
'''
x = x * x
print x
输出:
Test: square(-5.0)
Your output:
25.0
None
Correct output:
25.0
Test: square(3.17)
Your output:
10.0489
None
Correct output:
10.0489
Test: square(-3.4)
Your output:
11.56
None
Correct output:
11.559999999999999
为什么我的代码打印出来(a)“无”,在某些情况下(b)错误答案?
答案 0 :(得分:3)
如果您没有从函数返回任何值,默认情况下它将返回None
。
因此,如果您尝试打印函数的返回值,则会得到None
。因此,只是不打印函数调用的结果。
您可以更改函数以返回计算出的 square 而不是打印它:
def square(x):
'''
x: int or float.
'''
return x * x
答案 1 :(得分:1)
你得到None
,因为你正在调用你的函数:
print square(3.17)
换句话说,您正在打印函数的返回值。但是这个功能不会返回任何东西;换句话说,它返回None
。
由于已经打印结果,因此没有理由以此方式调用该函数。简单地称之为:
square(3.17)
或更改功能,使其返回结果而不是打印结果。 (这可能是更好的方法,因为它使函数更普遍有用 - 毕竟有时你可能不想打印结果。)
对于错误答案,二进制浮点数学不能完美地表示所有小数。十进制中看起来有限的数字可能具有无限的二进制表示;例如,3.4
就是这样的一个。因此,根据定义,所有有限表示都是近似值,并且数学运算通常会给出稍微“关闭”的结果。 Python会在打印您的数字时尝试隐藏这些差异,但它并不总是这样做。解决方案是使用Decimal
类(在decimal
模块中)来表示您的数字。