写程序步骤与试错

不要往回翻!现在自己动手尝试着写出这个函数?你会发现其实并不容易的……

def is_leap(year):
    pass

第一步,跟很多人想象得不一样,第一步不是上来就开始写……

第一步是先假定这个函数写完了,我们需要验证它返回的结果对不对……

这种 “通过先想办法验证结果而后从结果倒推” 的开发方式,是一种很有效的方法论,叫做 “Test Driven Development”,以测试为驱动的开发。

如果我写的 is_leap(year) 是正确的,那么:

is_leap(4) 的返回值应该是 True
is_leap(200) 的返回值应该是 False
is_leap(220) 的返回值应该是 True
is_leap(400) 的返回值应该是 True

能够罗列出以上四种情况,其实只不过是根据算法 “考虑全面” 之后的结果 —— 但你自己试试就知道了,无论多简单的事,想要 “考虑全面” 好像并不容易……

所以,在写 def is_leap(year) 中的内容之前,我只是用 pass 先把位置占上,而后在后面添加了四个用来测试结果的语句 —— 它们的值,现在当然都是 False…… 等我把整个函数写完了,写正确了,那么它们的值就都应该变成 True。

def is_leap(year):
    pass

is_leap(4) is True
is_leap(200) is False
is_leap(220) is True
is_leap(400) is True

试错

你自己动手,从写测试开始,逐步把它实现出来试试?—— 肯定不能允许你拷贝粘贴,哈哈。

在 Python 语言中,有专门用来 “试错” 的流程控制 —— 今天的绝大多数编程语言都有这种 “试错语句”。

当一个程序开始执行的时候,有两种错误可能会导致程序执行失败:

语法错误(Syntax Errors)
意外(Exceptions)

比如,在 Python3 中,你写 print i,而没有写 print(i),那么你犯的是语法错误,于是,解析器会直接提醒你,你在第几行犯了什么样的语法错误。语法错误存在的时候,程序无法启动执行。

但是,有时会出现这种情况:语法上完全正确,但出现了意外。这种错误,都是程序已经执行之后才发生的(Runtime Errors)—— 因为只要没有语法错误,程序就可以启动。

在 Python 中,我们可以用 try 语句块去执行那些可能出现 “意外” 的语句,try 也可以配合
except、else、finally 使用。从另外一个角度看,try 语句块也是一种特殊的流程控制,专注于 “当意外发生时应该怎么办?”

try:
    f = open('test_file.txt', 'r')
except FileNotFoundError as fnf_error:
    print(fnf_error)

    [Errno 2] No such file or directory: 'test_file.txt'

你可能感兴趣的:(python)