《Think Python 2e》学习精粹(七): 迭代

《Think Python 2e》学习精粹(七): 迭代



  • 迭代:即重复运行某个代码块,有利用递归进行迭代、利用 for 循环进行迭代、利用 while 语句实现迭代等迭代方式;

1、重新赋值

  • 对同一变量进行多次赋值是合法的,新的赋值会使得已有的变量指向新的值(同时不再指向旧的值);
>>> x = 5
>>> x
5
>>> x = 7
>>> x
7
  • 给变量重新赋值非常有用,但是需要小心使用,对变量频繁重新赋值会使代码难于阅读,不易调试;

2、更新变量

  • 重新赋值的一个常见方式是 更新update),更新操作中变量的新值会取决于旧值;
>>> x = x + 1
  • 如果试图去更新一个不存在的变量,则会返回一个错误,这是因为 Python 是先求式子右边的值,然后再把所求的值赋给 x ;
>>> x = x + 1
NameError: name 'x' is not defined
  • 在更新变量之前,须先 初始化initialize)这个变量,通常是通过一个简单的赋值实现;
>>> x = 0
>>> x = x + 1
  • 通过加1来更新变量叫做 递增increment),减1叫做 递减decrement);

3、while 语句

  • while 语句的执行流程如下,这种形式的流程叫做循环(loop):
    • 首先判断条件为真还是为假;
    • 如果为假,退出 while 语句,然后执行接下来的语句;
    • 如果条件为真,则运行 while 语句体,运行完再返回第一步;
  • 循环主体应该改变一个或多个变量的值,这样的话才能让条件判断最终变为假, 从而终止循环;

4、break

  • 有些时候循环执行到一半才知道循环该结束了这种情况下,可以使用 break 语句来跳出循环;
while True:
    line = input('> ')
    if line == 'done':
        break
    print(line)

print('Done!')

5、平方根

  • 循环常用于计算数值的程序中,这类程序一般从一个大概的值开始,然后迭代式地进行改进;
  • 牛顿法 (Newton’s method) 是计算平方根的一种方法,想求 a 的平方根,从任意一个估算值 x 开始,利用下面的公式计算出更为较为精确的估算值:
    在这里插入图片描述
while True:
    print(x)
    y = (x + a/x) / 2
    if y == x:
        break
    x = y
  • 检查两个浮点数是否相等比较危险,与其检查两个浮点数是否完全相等,计算二者之差的绝对值或数量级更为安全;
if abs(y-x) < epsilon:          # epsilon 为决定精确度的值, 如 0.0000001
    break

6、算法

  • 算法:牛顿法就是一个 算法Algorithm)示例,是解决一类问题的计算机制 (牛顿法是计算平方根);
  • 算法是一个机械的过程,每一步都是依据一组简单的规则跟着上一步来执行的;
  • 执行算法的过程是很乏味的,但是设计算法就比较有趣了,是计算机科学的核心;
  • 理解自然语言等一些人类下意识能做的事情,目前还没有算法;

7、调试

  • “对分调试”法:
    • 将问题拆为两半;
    • 在代码中间部分或者附近的地方即中间点,添加打印可以检查的值的 print 语句(或其他具有可验证效果的代码),然后运行程序;
    • 如果中间点检查出错了,那么就说明程序的前半部分存在问题,如果没问题,则说明是后半部分出错了;
    • 每次这样检查,就可以将需要搜索的代码行数减少一半,100行的程序经过6步之后,理论上将找到出错的代码行;
  • 确定程序的 “中间部分” :
    • 计算行数并且取其中间行是没有意义的;
    • 多考虑程序中哪些地方比较容易出问题,或者哪些地方比较容易进行检查;
    • 选定一个检查点(断点),这个断点前后出现bug的概率差不多。

猜你喜欢

转载自blog.csdn.net/weixin_41217917/article/details/112678474