一、一元二次方程求解。
ax^2+bx+c=0
Error1、IndentationError: expected an indented block.
每个冒号的后一行都要缩进。不然就报错。Tab快捷键。
Error2、SyntaxError: invalid syntax。
此时有多出错误。
@1:判断if句,要用“==”而不是“=”。
@2:有可能是出错的前一行出现了错误。漏掉括弧啥的。
@3:if 后面漏加了冒号:
@4:实在找不出错误,就把报错的那一模块重新码一下==。
二、递归函数的尾递归优化。
在计算机中,函数调用是通过栈 (stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层 栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的, 所以,递归调用的次数过多,会导致栈溢出。解决递归调用栈溢出的方法是通过尾递归优化,把循环看成是一种特殊的尾递归函数也是可以的。
@1、python 中定义函数的语句后面不要忘了加冒号,不然出现无效语句。
@2、“if...else...”中else后的内容,需要跟if并列排齐,不用再空格,不然输出“None”。
三、汉诺塔。
汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。三根柱子的位置分别标注为A、B、C,A柱子上的总圆盘数量为n。move(n,A,B,C)
思路分三步走:
@1、先把n-1个圆盘从A放到中转站B
@2、把第n个最大的圆盘从A放到C
@3、把n-1个圆盘从B放到C
期间会应用递归方法。
python 代码:
输出:
步骤分析:
四、斐波拉契数列(Fibonacci):
除第一个和第二个数外,任 意一个数都可由前两个数相加得到,它用列表生成式写不出来,但是,用函数把它打印出来却很容易:fib 函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似 generator。
输出:
把 print(b)改为 yield b 就可以把 fib 函数变成 generator,如果一个函数定义中包含 yield 关 键字,那么这个函数就不再是一个普通函数,而是一个 generator(如果列表元素可以按照某种算法推算出来这样就不必创建完整的 list,从而节省大量的空间。在 Python 中,这种一边循环一边计算的机制,称为生成器:generator)。在执行过程中,遇到 yield 就中断,下次又继续执行。例如:
输出:
五、杨辉三角。
杨辉三角,是二项式系数在三角形中的一种几何排列,每个数等于它上方两数之和。
思路分析:每一行用一个数列(list)实现的,也就是说,我们得在程序中不断的返回每一行的list并且打印出来。结合杨辉三角的特点,每一行除了第一个和最后一个数之外的话中间的数都等于它上方的两个数。所以可按此规律得到每一行的数列可以表示为:
具体分析为:
整体实现代码为:
输出为:
六、利用埃氏筛选法求素数
对于 从2开始的自然数序列:2,3,4,5,6,
7…… ,利用埃氏筛选法求素数:
思路:
@1、取第一个数2,2为素数,然后用2把序列中2的倍数筛掉;
@2、取新序列中的第一个数3,用3把序列中3的倍数筛掉;
@3、取新序列第一个数5,把5的倍数全部筛掉;
如此,不断筛下去,就可以得到所有的素数;
其中,filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回。