MIT计算机编程导论笔记(第四课)
上节总结:
赋值语句(assignment)
条件语句(conditional)
输入输出(I/O)
循环结构(loop constracts):for, while
数据类型
Turing complete: 图灵完全,以上知识足够写出任何程序
在一个文件放置大量代码的缺陷:
难以寻找需要的代码
难以调试
难以了解代码的目的
两样重要的东西:分解(decomposition)和抽象(abstraction)
分解:将代码分解为可循环利用的独立模块
抽象:忽略细节内容,黑箱设定。给予合法正确的输入,返回正确期望的输出
函数:可以将代码分解为模块,可以实现抽象(忽略实现细节)。函数的实质—构建基本指令
定义函数的语法:
def function-name(x,y):
return None
return—返回函数的结果
None标志:无实际返回值。打印值为None的对象或返回None的函数时将无输出
*在每个分支使用return来返回值是一个好的编程规则
函数的调用:
function-name(param-value)
x = function-name(param-value)
函数中的变量作用域都为本地
局部变量:
局部变量不影响全局变量.函数中定义的变量只在函数中作用。
函数功能说明注释:”””Return xxx to xxx”””
练习:农场养有鸡和猪,有20个头56只脚,鸡和猪各有几只?(假设无畸形以及残疾。。)
方案:穷举,蛮力算法
转换类型:x = int(raw_input(“enter a number”))
几乎所有可以用元组的地方可以使用列表代替
*注意到一个特殊的赋值方法:使用元组/列表同时为多个变量赋值:
x , y , z = (1, 2, 3)
此时x值为1,y为2,z为3
递归:
将问题分解为小规模的同一个问题的若干版本以及一些其他操作
举例:美国居民的国籍定义。
练习:1. 判断文字是否回文(Palindrome)(从左到右以及从右到左是否相同),使用递归
2. Fibonacci数列(前两个数字为0,1,后面的数字为前两个数字之和)。起源于斐波那契数兔子,兔子出生1个月可开始繁殖,假设每次都生两只一公一母,那么X月后,总共会有多少兔子