博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MIT6.00.1X 计算机科学和PYTHON编程导论 第二周
阅读量:5823 次
发布时间:2019-06-18

本文共 3209 字,大约阅读时间需要 10 分钟。

hot3.png

第三讲    简单算法

        循环(迭代)

                

    while循环:

        例:

           

    while循环需要一个布尔测试来判断是否来执行循环体,如果布尔测试结果为真(itersLeft不等于0)则执行循环体,当到达指令序列的结尾时(循环体结束时),它会返回重新测试布尔值以上图为例,因此,它会在代码中循环几次,直到布尔值最终为假。当布尔值为假时, 程序会跳到循环的结尾处,就是缩进停止的地方,然后程序继续选择新的指令并继续执行。

    while循环需要在循环体中改变布尔测试的变量,如果不改变循环永远都不会结束

    循环的特征:

            需要一个变量:

                    在循环体外初始化

                    在循环体内改变

                    测试的结束取决于这个变量

    Guess and Check:

            猜测检验方法, 通过迭代的方法,给出处理中的问题的不同结果,然后检验结果是否正确。

    穷举:

    简单地从可能值域的一端的开始,并且试图按顺序尝试每个值。

    例:

    通过猜测检验的方法求出某个整数的立方根

# lecture 3.2, slide 6# Find the cube root of a perfect cubex = int(raw_input('Enter an integer: '))ans = 0while ans**3 < abs(x):    ans = ans + 1if ans**3 != abs(x):    print(str(x) + ' is not a perfect cube')else:    if x < 0:        ans = -ans    print('Cube root of ' + str(x) + ' is ' + str(ans))

    for循环:

        从一系列选择中完成迭代

        语法:

for 
in
:

        循环开始时,标识符最初会绑定到序列里的第一个值。接着运行代码块。运行结束后,标识符将会绑定到序列里的下一个值,运行代码块。直到序列里的所有值都被运行。

        range(n):产生一个从0到n-1的序列

        range(m,n):产生一个从m到n-1的序列

        break:跳出当前循环

        例:

        通过for循环遍历0到x之间的整数来查找x的立方根,如果找到了通过break跳出循环

# lecture 3.3, slide 3# Find the cube root of a perfect cubex = int(raw_input('Enter an integer: '))for ans in range(0, abs(x)+1):    if ans**3 == abs(x):        breakif ans**3 != abs(x):    print(str(x) + ' is not a perfect cube')else:    if x < 0:        ans = -ans    print('Cube root of ' + str(x) + ' is ' + str(ans))

    浮点数

        浮点数是一个近似值,要测试两个浮点数是否相同应该采用两个浮点数差得绝对值小于某一个数。

    二分查找法:

        对于拥有排序属性的问题,二分查找能有效的降低解决问题的步骤。

        二分查找法是先找到中间的数据与需要的结果做对比,通过比较大小,就可以确定哪一半是不需要的,这是再在另一半数据中按二分法查找,这样每次只需要查找很少的数据就能得到需要的结果。

        例:

# lecture 3.6, slide 2# bisection search for square rootx = 12345epsilon = 0.01numGuesses = 0low = 0.0high = xans = (high + low)/2.0while abs(ans**2 - x) >= epsilon:    print('low = ' + str(low) + ' high = ' + str(high) + ' ans = ' + str(ans))    numGuesses += 1    if ans**2 < x:        low = ans    else:        high = ans    ans = (high + low)/2.0print('numGuesses = ' + str(numGuesses))print(str(ans) + ' is close to square root of ' + str(x))

        牛顿拉夫逊算法:

            该算法用于查找多项式的根,多项式 p(x)是一个具有系数和指数的序列,即anxn+an-1xn-1+....+a1x1+a0它只是一个序列,如果g是根的近似值,即结果为0,那么g-p(g) / p’(g)是

一个更加接近的数值,其中p’是p的导数

# Lecture 3.7, slide 3# Newton-Raphson for square rootepsilon = 0.01y = 24.0guess = y/2.0while abs(guess*guess - y) >= epsilon:    guess = guess - (((guess**2) - y)/(2*guess))    print(guess)print('Square root of ' + str(y) + ' is about ' + str(guess))

第四讲    函数

        函数

            将计算的细节和计算的使用区分开来,我们将此称作黑盒抽象。这使得重复使用更加方便,调试和修改也更加简单。函数可以在不同的地方重复使用

        语法:

def 
(
):

        def是一个关键字

        例:

def max(x, y):    if x > y:        return x    else:        return y

        函数通过如下方式调用:

        z = max(3, 4)

        retrun是一个关键字,用于在函数内返回紧跟其后的表达式的值

        当前环境下的变量只作用于当前环境,调用函数时,函数会开辟单独的环境,外部变量的值,通过函数的参数与函数内部的变量绑定。

        模块:

            模块通过import或form * import *导入

            将拥有共同主题的函数放在一个单独的python文件中,这样在其他文件中就可以使用import导入这些函数。

            例:

这是circle.py的文件

# circle.py# From Lecture 4, Modulespi = 3.14159def area(radius):    return pi*(radius**2)def circumference(radius):    return 2*pi*radius

        下面通过import导入这个模块

import circlepi = 3.0print piprint(circle.pi)print(circle.area(3))print(circle.circumference(3))

    这样就能通过    模块名.函数名    调用circle.py里面的函数,变量

        下面是通过from * import *来导入,这样是将circle中所有的内容都导入

from circle import *pi = 0.0print(pi)print(area(3))print(circumference(3))

           这样的调用可以通过函数名直接使用circle里面的函数。省去了模块名

转载于:https://my.oschina.net/u/1863423/blog/700170

你可能感兴趣的文章
python socket编程实现的简单tcp迭代server
查看>>
一曲忠诚的赞歌
查看>>
大学生创业容易挂掉的原因来自2年实际孵化工作的总结
查看>>
资源管理器也玩多标签:QT TabBar v1.5.0.0a3
查看>>
我的丈夫是个程序员
查看>>
软件正在改变世界,为什么程序员却得不到足够的尊重?
查看>>
C# .NET4.0 改为 到.NET2.0 时 TypedTableBase 报错解决方法
查看>>
SQL点滴32—Excel中CONCATENATE函数生成SQL语句
查看>>
oninput,onpropertychange,onchange的用法和区别【转载】
查看>>
WebService原理
查看>>
Nginx学习之三-ngx_http_request_t结构体
查看>>
JS里写入(混写)php asp
查看>>
安卓开发_浅谈SubMenu(子菜单)
查看>>
Android 编程下的代码混淆
查看>>
python插入oracle数据
查看>>
常见的Hadoop十大应用误解
查看>>
App开发所要注意的几个法务问题(转)
查看>>
微信分享JS接口失效说明及解决方案
查看>>
POJ3176:Cow Bowling(数字三角形问题)
查看>>
简易扩展Visual Studio UnitTesting支持TestMethodCase
查看>>