MITx - 6.00.1x 笔记(4) Good Programming Practices
- Testing and Debugging
- 防御性编程
- 测试的几种情况
- Bugs
- Debugging
- 防御性编程
- Exceptions and Assertions
- try except else finally
- Assertions
- 练习题笔记
7 Testing and Debugging
防御性编程
- 一开始设计程序时就要考虑到应当便于testing和debugging
- 把程序分割成可以分别测试和调试的的几个小部分
- 在程序的开头要注释,来说明程序的输入和输出
- 代码间注释
测试的几种情况
正确的测试顺序:
1. 单元测试
2. 回归测试
3. 集成测试
很多人会急于运行整个程序进行测试,很容易出bug。正确的做法是从小到大一步步测试。
测试的几个角度:
- 直觉
- 随机测试
- 黑盒测试(基于功能)
- 白盒测试(通过源代码)
黑盒测试
白盒测试
Bugs
- Overt 显性 vs. Covert 隐性
- Persistent 持续 vs. Intermittent 间歇
- 隐性和间歇性的bugs很难找
Debugging
- steep learning curve 陡峭的学习曲线
- goal is to have a bug-free program
- tools
- built in to IDLE and Anaconda
- Python Tutor
print
statement- use your brain, be systematic in your hunt
Logic errors - Hard
- think before writing new code
- draw pictures, take a break
- explain (not just read) the code
Don’t and Do
8 Exceptions and Assertions
python常见错误类型:
AttributeError:属性错误,特性引用和赋值失败时会引发属性错误
NameError:试图访问的变量名不存在
SyntaxError:语法错误,代码形式错误
IOError:输出输入错误
KeyError:使用了映射中不存在的关键字(键)时引发的关键字错误
IndexError:索引错误
TypeError:类型错误
ZeroDivisonError:除数为0错误
ValueError:值错误
try, except, else, finally
- 能够顺利执行
try
语句时才执行else
语句,如果出现exception
则不执行else
- 总是要执行
finally
手动设置需要抛出的错误提示
Assertions
用断言来确认某些期望的情况
def avg(grades):assert not len(grades) == 0, 'no grades data' # 如果grades为空,抛出提示return sum(grades)/len(grades)
可以使用assertions来及时指出不符合条件的地方,而不用手动添加各种print
来寻找bug,可以用于检查输入输出是否符合要求
可以使用assertions来检查数据种类、数据结构、限制条件是否符合要求
练习题笔记:
d.get(key,default)
如果字典d
中有指定的key
,返回其对应的值;否则返回default
。如果没有指定default
,则返回None
。
===>这样可以避免从字典中取值时抛出KeyError
。
例如:
def getFrequencyDict(sequence):"""Returns a dictionary where the keys are elements of the sequenceand the values are integer counts, for the number of times thatan element is repeated in the sequence.sequence: string or listreturn: dictionary"""# freqs: dictionary (element_type -> int)freq = {}for x in sequence:freq[x] = freq.get(x,0) + 1 # 统计频次的简洁代码,且可避免抛出KeyErrorreturn freq
Mutable Sequence Types
operation | result |
---|---|
s.clear() | removes all items from s (same as del s[:]) |
s.copy() | creates a shallow copy of s (same as s[:]) |
===>可以使用.copy()
方法来复制字典
print(content, end=someting)
end表示print将如何结束,默认为end=”\n”。
In:
print('Hello', end=' ')
print('world', end='')
print('!')
Out:
Hello world!
转载于:https://www.cnblogs.com/huidanz/p/8543239.html
MITx - 6.00.1x 笔记(4) Good Programming Practices相关推荐
- CS入门学习笔记5-MIT 6.00.1x
MIT 6.00.1x 第五讲-递归Recursion ** iterative algorithms-- 迭代算法 作业一 Write an iterative function iterPower ...
- 读书笔记--Head First Programming 目录
1. 转载于:https://www.cnblogs.com/0x2D-0x22/p/4059191.html
- MIT.6.00.1X --Week 3 Lecture 5 -- 'Divid and conqer' algorithm 分而治之
–解决一个困难的时候把它分解成几个子问题 –子问题比初始问题要简单 –再结合子问题的解决方案处理初始问题 Example of "Palindrome": def isPalind ...
- python零基础能学吗 知乎-如何零基础入门 Python?
从17年6月入门Python到今天有大半年了,总结一下这半年来自学Python的路径. 本人只在两年前接触过HTML和CSS,但严格来说这两门只能算是标记语言而非编程语言,而且开始学Python的时候 ...
- A WORDGAME: HANGMAN
这道题是EDX上的课程:MITx: 6.00.1x Introduction to Computer Science and Programming Using Python 第三周的作业题,是猜单词 ...
- OREILLY Programming .NET 3.5 读书笔记之一
OREILLY Programming .NET 3.5 读书笔记之一 <Programming .NET 3.5>是OREILLY 2008.08出版的.NET 3.5 开发书籍,作者是 ...
- 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(day01~day10)(2015年11月17日20:51:59)
本笔记是个人笔记+摘录笔记相结合,非完全原创 day01 win 7系统打开DOS有趣方法:按住shift+右键,单击"在此处打开命令窗口"(注意:在此处可以是任何的文件夹,不一定 ...
- 传智播客 刘意_2015年Java基础视频-深入浅出精华版 笔记(2015年10月25日23:28:50)
day01 win 7系统打开DOS有趣方法:按住shift+右键,单击"在此处打开命令窗口"(注意:在此处可以是任何的文件夹,不一定是桌面) 用DOS删除的文件不可以在回收站恢复 ...
- 《Oracle PL/SQL实例精讲》学习笔记1——数据准备
前言: 古人言,"业精于勤荒于嬉,行成于思毁于随".对于自己所从事的工作,若使理论知识和实践经验相辅相成,则可使自己的业务能力日益增长,事半功倍.反之,亦然. 前几天,接到一个需求 ...
最新文章
- RESTful之视图概览和视图说明
- C/S与B/S架构的区别和优缺点
- js高程(二)-----继承
- 线程安全与锁优化(思维导图)
- java abstractset 继_java集合框架-AbstractSet
- 【CF1182D】Complete Mirror【树的重心】
- vscode设置templates_在VScode中创建你的代码模板的方法
- 什么是OAuth 2.0
- java digests.generatesalt_Java DigestUtils.sha1Hex方法代碼示例
- 【Linux】【Commands】文本查看类
- Android开发 ——线性布局文件、TextView、ListView的基本写法
- 获取httpservletrequest所有参数的名称和值
- 单位与单位的换算(二)
- Linux kernel crash定位
- STM8L RTC总结初始化和配置
- ubuntu18.04 卸载Anaconda3
- Linux操作命令分类详解 - 目录文件(二)
- 虚拟pc服务器 翻译,单机服务器配置文件;ServerSettings.ini【翻译】
- NLP 分类问题的讨论
- Referer的作用
热门文章
- PyTorch 1.9发布!移动端疯狂更新
- 收藏 | EfficientNet模型的完整细节
- 【资源下载】旷视研究院张祥雨valse2019报告PPT——高效轻量级深度模型的研究与实践
- C++编程积累——C++实现十进制与八进制之间的互相转换
- 使用Seq2Seq+attention实现简单的Chatbot
- 热传导/物质扩散算法应用于推荐
- mysql text 函数的使用方法_MySQL空间数据操作:GeomFromText()和astext()函数报错解决...
- mysql常用的yu语句_常用mysql语句备份
- mysql 插入 point_mysq Point类型 查询和插入操作:insert和select
- Jrebel 激活方式