0
自己编写测试用例
在写完每一份代码的同时,我一般都在代码的后面顺便写一些简单的测试用例。这些测试用例一般都比较简单,以简单地验证代码是否可运行,而且至少保证对这些测试用例,运行结果是正确的。这些测试用例仅用于协助我完成代码的编写和调试,并不保证对各种情况的全面覆盖。我将会在一下节介绍如何完全验证我们的代码是否正确。
以《第1期 单调数组》为例,大家在文章中看到的代码是这样的:
def cmp(a, b):
if a < b: return -1
if a == b: return 0
return 1
def monotonic(array):
size = len(array)
# 记录单调方向,-1为递减,1为递增
global_dir = None
for i in range(size - 1):
cur_dir = cmp(array[i], array[i + 1])
if cur_dir == 0:
# 如果两个相邻的数相等,则忽略
continue
elif global_dir is None:
# 第一次不相等的两个数的单调方向,就是整个数组期望的单调方向
global_dir = cur_dir
elif global_dir != cur_dir:
# 出现与期望的单调方向不同的情况,则该数组不单调
return False
return True
实际上,我会在后面加上测试用例。所以在我自己看到的版本是这样的:
def cmp(a, b):
if a < b: return -1
if a == b: return 0
return 1
def monotonic(array):
size = len(array)
# 记录单调方向,-1为递减,1为递增
global_dir = None
for i in range(size - 1):
cur_dir = cmp(array[i], array[i + 1])
if cur_dir == 0:
# 如果两个相邻的数相等,则忽略
continue
elif global_dir is None:
# 第一次不相等的两个数的单调方向,就是整个数组期望的单调方向
global_dir = cur_dir
elif global_dir != cur_dir:
# 出现与期望的单调方向不同的情况,则该数组不单调
return False
return True
if __name__ == "__main__":
print(monotonic([1, 2, 3])) # True
print(monotonic([6, 5, 4, 4])) # True
print(monotonic([4, 5, 7, 6, 6])) # False
1
OJ(在线判题)
OJ就是Online Judge,即在线判题。一般OJ网站都是一个大型算法题库。计算机专业的人,应该很熟悉“A题”这个词,主要就是指在线做算法题目。之所以叫A题,可能跟ACM计算机相关的比赛有关系。我毕业快十年了,不知道新时代的大学生们还用不用“A题”这个词。
大部分情况下,至少到目前为止,本课题每期文章的题目基本上在各OJ上都可以找到。这些网站提供了代码编辑、提交验证、社区、题解等多种功能。你可以在这些网站上面提交自己的代码,并验证代码的正确性;也可以查看其它人的解题思路,以帮助自己更好地理解题目,更高质量地完成自己的代码。一般情况下,我建议你看官方的题解,这些题解会有比较深入的讲解和比较高质量的实现。
互联网上有大量的OJ网站,以下是一些比较有名的在线算法题库网站:力扣力扣 (LeetCode) 官网 - 全球极客挚爱的技术成长平台leetcode-cn.comPOJ 北大题库Welcome To PKU JudgeOnlinepoj.orgPTA PTA其实就是以前的ZOJ,即浙大题库PTA | 程序设计类实验辅助教学平台pintia.cn牛客网牛客网 - 互联网求职神器和备考学习平台www.nowcoder.comhihoCoder 据说此网站出于POJ的团队之手hihoCoderhihocoder.com
我们读大学的时候,基本上都是在POJ上A题;另外,ZOJ也是我们比较常去的。但近来,力扣貌似比较炙手可热。我本人也比较喜欢在加扣上找题目,以作为本题目的内容;所以我比较推荐大家上加扣A题,或者测试本课题的题目。微信扫码关注我哦