代码改变世界

文末有一个关于一元二次方程式的定义以及解答,我查了下是阿凡达方程?

2017-11-18 22:06  成林_leon  阅读(891)  评论(0编辑  收藏  举报
1 如果忘记函数的作用,可以在交互式命令行通过help(abs)查看abs函数的帮助信息
类似:
help(len):help(len)
2 调用函数的时候,如果传入的参数数量不对,会报具体的错误,并且Python会明确地告诉你需要修改的要点位置或者原因,所以会判断错误的原因很重要
3 函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”,所以python真的很神奇.
>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数
返回值为:1
空函数

如果想定义一个什么事也不做的空函数,可以用pass语句:
def nop():
pass
这种写在编程中一般是暂时不考虑内部的构造,先pass让程序能够执行下去,然后再继续编代码,等之后的解决完了,早解决pass的代码
参数检查

调用函数时,如果参数个数不对,Python解释器会自动检查出来,并抛出TypeError:

>>> my_abs(1, 2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: my_abs() takes 1 positional argument but 2 were given

在语法上,返回一个tuple可以省略括号,而多个变量可以同时接收一个tuple,按位置赋给对应的值,所以,Python的函数返回多值其实就是返回一个tuple,但写起来更方便。
请定义一个函数quadratic(a, b, c),接收3个参数,返回一元二次方程:

# ax2 + bx + c = 0(a!=0)的两个解。

如果一元二次方程ax2+bx+c=0(a≠0)满足4a-2b+c=0
根据题意△=b2-4ac=0,
∵4a-2b+c=0,即4a=2b-c,
∴b2-(2b-c)?c=0,即(b-c)2=0,
∴b=c,
∴4a=2b-b=b.
故选D.
import math


def quadratic(a, b, c):
for i in a, b, c:
if not isinstance(i, (int, float)):
raise TypeError('int or float')

if a == 0:
raise SyntaxError("error! a != 0")

d = b ** 2 - 4 * a * c
if d < 0:
return print('error')
elif d >= 0:
x1 = (-b + math.sqrt(d)) / (2 * a)
x2 = (-b - math.sqrt(d)) / (2 * a)
return x1, x2


if __name__ == '__main__':
print(quadratic(2, 3, 1)) # => (-0.5, -1.0)
print(quadratic(1, 3, -4)) # => (1.0, -4.0)