算法初介绍
import unittest
# 算法的五个特性
# 1.输入 2.输出 3.明确性 4.有限性 5.有效性
# 算法的的时间复杂度
# 1.事后统计
# 2.事前分析
# 可以使用步数来描述程序的运行时间
def find_max(arr):
max_num = arr[0]
steps = 0
for i in range(1, len(arr)):
steps += 1
if max_num < arr[i]:
max_num = arr[i]
print("{}次".format(steps))
ar = [1, 3, 5, 6, 8, 90]
find_max(ar)
# 可见上面的式子最长为五步
# 常见的时间复杂度顺序
# 1. O(1):常数时间复杂度,是最优秀的时间复杂度,因为它的运行时间不受输入规模的影响。
# 2. O(log n):对数时间复杂度,对于大规模的数据处理仍然非常快速。例如,二分搜索和平衡树在大量数据中仍然可以快速定位元素。
# 3. O(n):线性时间复杂度,通常是处理数据的最优解。例如,计数排序和基数排序就是线性时间复杂度的排序算法。
# 4. O(n log n):线性对数时间复杂度,通常是排序算法的最优解。例如,归并排序和快速排序都是O(n log n)的时间复杂度。
# 5. O(n^2):平方时间复杂度,通常只能处理小型数据集。例如,选择排序和插入排序都是O(n^2)的时间复杂度。
# 6. O(2^n):指数时间复杂度,通常只能处理非常小型的数据集。例如,穷举算法和回溯算法都是指数时间复杂度的算法。
# 算法的空间复杂度是指算法需要使用的内存空间。
# 通常使用大O表示法来表示算法的空间复杂度,例如O(1)、O(n)、O(n^2)等等。
# 与时间复杂度类似,空间复杂度也是用来衡量算法效率的重要指标。但是需要注意的是,
# 空间复杂度并不是唯一的衡量标准,因为不同的算法可能会有不同的空间需求和时间需求,需要综合考虑。
url1 = 'www.'+'python'+'.com'
# url1的效率最低 因为使用+后进行字符串的连接 生成的新字符串会重新请求内存
url2 = '.'.join(['www', 'python', 'com'])
url3 = '{}{}{}'.format('www.', 'python', '.com')
print((url1, url2, url3))
# `join()`是Python中的一个字符串方法,用于将一个可迭代对象(如列表、元组等)中的元素连接成一个字符串。
# 例如:`"-".join(["a", "b", "c"])`会返回字符串`"a-b-c"`。
# 这个方法的语法如下:`separator.join(iterable)`,其中`separator`是连接元素的分隔符,`iterable`是需要连接的可迭代对象。
# 需要注意的是,`join()`方法只能用于字符串类型的元素,如果列表中包含非字符串类型的元素,需要先进行类型转换。
# 例如:`"-".join([1, 2, 3])`会报错,需要先将列表中的数字转换为字符串类型。
# 挑战:使用程序来实现用户输入的月份有多少天
# what?
# 1.有31天的月份1,3,5,7,8,10,12
# 2.确定30天的月份 4,7,9,11
# 3.闰年2月是28天
# 4.非闰年的2月是28天
# 5.如果年份能被4整除则为闰年
# how?
# def cal(year, month):
# list_1 = [1, 3, 5, 7, 8, 10, 12]
# list_2 = [4, 7, 9, 11]
# for lis in list_1:
# if int(month) == lis:
# print('{}-{}有31天'.format(year, month))
# for lis in list_2:
# if int(month) == lis:
# print('{}-{}有30天'.format(year, month))
# if int(month) == 2:
# if int(year) % 4 == 0:
# print('{}-{}有29天'.format(year, month))
# else:
# print('{}-{}有28天'.format(year, month))
#
#
# y, m = input("请输入要查询的年份和月份,使用-分隔,如2023-8:").split('-')
# cal(y, m)
# 对编写的代码进行单元测试
# 使用unittest测试程序的步骤如下:
# 1. 导入unittest模块。
# 2. 创建一个继承自unittest.TestCase的测试类,该类中包含多个测试方法。
# 3. 在每个测试方法中编写测试代码。
# 4. 使用unittest.main()方法运行测试
def cal(year, month):
list_1 = [1, 3, 5, 7, 8, 10, 12]
list_2 = [4, 7, 9, 11]
for lis in list_1:
if int(month) == lis:
return 31
for lis in list_2:
if int(month) == lis:
return 30
if int(month) == 2:
if int(year) % 4 == 0:
return 29
else:
return 28
class TestCal(unittest.TestCase):
def test_january(self):
self.assertEqual(cal(2020, 1), 31)
def test_february(self):
self.assertEqual(cal(2020, 2), 29)
def test_march(self):
self.assertEqual(cal(2020, 3), 31)
def test_april(self):
self.assertEqual(cal(2020, 4), 30)
if __name__ == '__main__':
unittest.main()
# 测试通过