MITx - 6.00.1x 笔记(4) Good Programming Practices

MIT 6.00.1x 计算机科学和Python编程导论 Set 1 阅读详情

7 Testing and Debugging

防御性编程

DefensiveProgramming

  • 一开始设计程序时就要考虑到应当便于testing和debugging
  • 把程序分割成可以分别测试和调试的的几个小部分
  • 在程序的开头要注释,来说明程序的输入和输出
  • 代码间注释
    instruction
测试的几种情况

正确的测试顺序:
1. 单元测试
2. 回归测试
3. 集成测试
很多人会急于运行整个程序进行测试,很容易出bug。正确的做法是从小到大一步步测试。
ClassesOfTests

测试的几个角度:

  • 直觉
  • 随机测试
  • 黑盒测试(基于功能)
  • 白盒测试(通过源代码)
    TestingApproaches

黑盒测试
Black Box Testing
白盒测试
White Box Testing

Bugs
  • Overt 显性 vs. Covert 隐性
  • Persistent 持续 vs. Intermittent 间歇
  • 隐性和间歇性的bugs很难找
    Categories of 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
DONT&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

Other Exceptions
  
手动设置需要抛出的错误提示

Exceptions as Control Flow
  

Assertions

用断言来确认某些期望的情况
Assertions

def avg(grades):
    assert not len(grades) == 0, 'no grades data' # 如果grades为空,抛出提示
    return sum(grades)/len(grades)

ApplyAssertions

可以使用assertions来及时指出不符合条件的地方,而不用手动添加各种print来寻找bug,可以用于检查输入输出是否符合要求

    
whereToUseAssertions
可以使用assertions来检查数据种类、数据结构、限制条件是否符合要求


练习题笔记:

d.get(key,default)
如果字典d中有指定的key,返回其对应的值;否则返回default。如果没有指定default,则返回None。

===>这样可以避免从字典中取值时抛出KeyError。

 例如:

def getFrequencyDict(sequence):
    """
    Returns a dictionary where the keys are elements of the sequence
    and the values are integer counts, for the number of times that
    an element is repeated in the sequence.

    sequence: string or list
    return: dictionary
    """
    # freqs: dictionary (element_type -> int)
    freq = {}
    for x in sequence:
        freq[x] = freq.get(x,0) + 1  # 统计频次的简洁代码,且可避免抛出KeyError
    return freq

   
Mutable Sequence Types

operationresult
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!
MIT 6.00.1x 计算机科学和Python编程导论 Set 6 阅读详情

相关推荐

Good-Programming-Practices:各种良好的编程习惯,规则,准则,甚至(完全主观的)最喜欢的大师和书籍的汇编

良好的编程习惯 首先,一些非常重要的相关主题(至少对我而言): (又名“敏捷宣言”) 敏捷宣言 敏捷宣言 哲学(在专家项目管理网站) 避免低 一些重要的提醒: 关于专业精神: “编写干净的代码是您必须称呼自己为专业人员的工作。 除了做出最好的事情,没有合理的借口。” -Robert C. Martin,“清洁代码:敏捷软件Craft.io手册” “我们认为,除非您关心做好软件,否则开发软件毫无意义。” -Andrew Hunt,David Thomas,实用程序员:从《旅人》到《大师》 关于错误代码和良好代码: “正是糟糕的代码使公司倒闭了。” -Robert C. Martin,“清洁代码:敏捷软件Craft.io手册” “代码就像幽默。 当您必须解释时,这很糟糕。” -科里·豪斯(Cory House) “……好的代码很重要……” -肯特·贝克(Kent Beck

良好的编程习惯,你知道多少呢?你又用过多少呢?

良好的编程习惯,你知道多少呢?你又用过多少呢? //X8023Z 2009.3.2 Good Programming Practice 1,Read the manuals for the version of C++ you are using.   Refer to these manuals frequently to be sure you are aware of the

优快云-8023-BLOG 970

Good Programming Practice

这本书从排错、测试、性能、可移植性、设计、界面、风格和记法等方面,讨论了程序设计中实际的、又是非常深刻和具有广泛意义的思想、技术和方法。

MIT/Unit 4: Good Programming Practices/8. Exceptions and Assertions

Exercise 2

Nana_1003的博客 166

MITx-6.00.1x

使用Python进行计算机科学和编程简介 介绍计算机科学,作为使用Python 3.5解决实际分析问题的工具。 关于本课程 本课程是两门课程的第一部分:计算机科学和使用Python编程入门,以及计算思维和数据科学入门。 它们的共同目的是帮助没有接触计算机科学或编程知识的人们学习计算思维和编写程序来解决有用的问题。 参加这两门课程的人中有些人会将它们用作高级计算机科学课程的垫脚石,但是对于许多人来说,这将是他们的第一门和最后一门计算机科学课程。 本次运行提供了使用Python 3.5的讲座视频,讲座练习和问题集。 即使您以前使用Python 2.7参加了该课程,您也可以在以后的课程中轻松过渡到Python 3.5,或者现在就注册以刷新学习内容。 由于这些课程可能是许多学生选修的唯一正式的计算机科学课程,因此我们选择了重点而不是深度。 目的是为学生提供许多主题的简要介绍,以便他们在需要考虑如

Xilinx Vivado vitis IDE launch Failed \ Web installer client Obsolete 怎么办

Xilinx vitis_IDE failed Web installer client Obsolete

weixin_44820962的博客 8644

MIT/Unit 4: Good Programming Practices/7. Testing and Debugging

Nana_1003的博客 177

MCGS 昆仑通态触摸屏 modbus TCP 数据转发

MCGS触摸屏数据转发modbus TCP数据转发

m0_63451859的博客 2万+

Chapter 12 Exceptions and Assertions

1) All exception types must extend the class Throwable or one of its subclass. There’re two kinds of exceptions in Java: checked exceptions and unchecked exceptions. The Error and RuntimeEx...

weixin_34270606的博客 244

(十)安卓开发中的Activity之间的通信使用详解

下面将结合代码和具体在 Android 开发中,Activity 之间的通信是非常常见且核心的功能之一使用场景,详细讲解这几种方式。

cuijiying的博客 1280

别只刷题了!我用834分经验告诉你,华为HCIP大数据考试(H13-723)这样准备更高效

本文分享了华为HCIP大数据认证(H13-723)834分通关的高效备考经验。通过分析考试动态、题库验证技巧和章节优先级策略,帮助考生超越单纯刷题,系统化掌握核心知识点。特别强调实时流处理和离线批处理等重点章节,提供黄金90分钟临场发挥策略,助力考生一次性通过考试。

weixin_38168786的博客 459

Linux Kernel Testing and Debugging

Dmesg check Kernel logsdmesg -t -l emergdmesg -t -l critdmesg -t -l alertdmesg -t -l errdmesg -t -l warndmesg -t -kdmesg -tKernel Testing ToolsThere are several tests under tools/testing th...

weixin_33796205的博客 268

海康线扫相机平场矫正实战:从原理到精准成像

本文深入解析了海康线扫相机平场矫正的原理与实战操作。通过拆解暗场与明场矫正的物理意义,揭示了其消除系统噪声、补偿像素响应不均的核心机制。文章详细指导了在海康相机上进行平场矫正的标准化流程、关键参数设置(如行高、灰度值控制)及常见误区,并提供了针对高行频匹配、环境稳定性维护等进阶调优技巧与问题排查指南,旨在帮助用户实现从原理理解到精准成像的跨越。

tomato的博客 791

【跟着MIT学Python】Unit 4.7 Good Programming Practices*

Classes of Tests Unit testing Regression testing Integration testing Black Box Testing Black-box testing is a method of software testing that tests the functionality of an application. A way to think about black-box testing is to look at both: The possi

快乐学习小猪猪的博客 317

手把手教你用Simulink+CANoe+Carsim搭建硬件在环仿真环境(避坑指南)

本文是一份详细的硬件在环仿真环境搭建指南,重点讲解如何将Simulink、CANoe和CarSim三大工具进行实战融合。内容涵盖软件版本兼容性、授权避坑、环境配置,并分步演示了从离线联合仿真到实现软实时同步的完整流程,旨在帮助汽车电子工程师高效构建稳定的HIL测试平台。

weixin_29092579的博客 406

ADS基础教程22 - 有限元电磁仿真(FEM)

一、引言二、FEM操作过程1.新建Layout1.新建Layout2.EM设置3.设置Frequency plan4.设置Output plan5.设置Options6.设置网格频率7.仿真结果三、总结介绍了在ADS中如何进行FEM仿真过程。END!}}END!

XZ_ZC的博客 2582

15 sites for Programming Practice

I’m a believer in learning by doing. Programming exercises are a useful tool to practice and improve your coding skills. After all, practice makes one, if not perfect, at least pretty darn good. (Yes,

青青的专栏--C/C++ OOA/D Design Pattern 470

BMS硬件设计要点:从STM32主控到BQ76920监控芯片的工程实践

电池管理系统(BMS)是锂电安全与寿命保障的核心,其硬件设计涉及微控制器选型、专用监控芯片接口、电源完整性、信号完整性及PCB布局等多维度协同。基于STM32与BQ76920的典型双层架构,需深入理解功能安全解耦原理——关键保护由ASIC硬件实现,算法决策交由MCU完成,契合ASIL-B等级要求。技术价值体现在毫秒级硬件保护响应、±10mV电压采样精度及抗EMI鲁棒性设计;广泛应用于电动工具、储能系统与轻型电动车等中高功率场景。本文聚焦BMS控制板硬件实现中的高频时钟EMC、I²C总线信号完整性、被动均衡可

weixin_30591519的博客 92

MITx - 6.00.1x 笔记(3) Structured Types

Structured Types Tuple 如果tuple中只有一个元素,需要加逗号“,”,否则不能被识别为tuple tuple中的元素不可被改变(string也是) 函数返回多个值时可以用tuple 使用tuple Lists # 删去list中元素的3种方法 list.del(list[index]) # 删去list中索引为index的元素 list.pop...

adan_journal 280

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

MITx - 6.00.1x 笔记(5) Object Oriented Programming

Object Oriented Programming-OOP Class instance Method Generator 练习题笔记 Object Oriented Programming-OOP pyhon中一切都是对象,各种对象实例 要将创建类和使用类中的实例区分开 创建类涉及:定义类的名称,定义类的属性...

weixin_30496751的博客 201

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

MITx - 6.00.1x 小结 Use it!

Computational Thinking is becoming a fundamental skill ! abstractions, algorithms, automated excution Use it! 转载于:https://www.cnblogs.com/...

weixin_30345055的博客 149

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

学堂在线 MITx: 6.00.1x 计算机科学和Python编程导论 problemset3

balance=4213 monthlyPaymentRate=0.04 annualInterestRate=0.2 Month=1 monthRate=annualInterestRate/12.0 sum=0 for i in range(1,13): sum=sum+balance*monthlyPaymentRate print 'Month: ',i print

小寒 1951

python 字符串 学堂在线 MITx: 6.00.1x 计算机科学和Python编程导论 problem set 2

s = 'xkhlboetagwpsotgx' max=-1 result='' for i in range(0,len(s)): count=1 for j in range(i+1,len(s)): if s[j:j+1]>=s[j-1:j]: count+=1 else: break

小寒 1102

MITx: 6.00.1x Problem Set1

MITx: 6.00.1x

u014363545的博客 541

MITx - 6.00.2x 笔记(Unit1 Lecture 3 Graph Problems)

Lecture 3 Graph Problems Graph Theory(图论) 图论是数学的一个分支,它以图为研究对象,研究顶点和边组成的图形的数学理论和方法。nodes, edges 现实世界中很多事物都是有联系的,因此图论特别适合于解决现实问题。 可应用于路径规划 Adjacency List(邻接表) 在图论中,邻接表代表一个图中的所有边或弧。 如果是无向...

weixin_30951389的博客 215
上一篇: MITx - 6.00.1x 笔记(3) Structured Types
下一篇: MITx - 6.00.1x 笔记(5) Object Oriented Programming
Huidanz
博客等级 码龄9年 31粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值