1,找质数
先定义一个判断质数的函数;
再在一个列表范围内找其中的质数.
"""
质数:大于1的整数,除了1和它本身以外不能再被其他数字整除。
定义函数,获取指定范围内的所有质数。
输入:2,20
输出:[2, 3, 5, 7, 11, 13, 17, 19]
"""
def is_prime(number):
for item in range(2, number):
if number % item == 0:
return False
return True
def get_prime(begin, end):
# list_result = []
# for num in range(begin, end):
# if is_prime(num):
# list_result.append(num)
# return list_result
return [num for num in range(begin, end) if is_prime(num)]
print(get_prime(2,20))
2,杨晖三角
先创建对应的空行,用None占位,然后添加首尾元素都为1;
接下来,从第三行开始,根据上一行,修改本行的元素值
"""
创建函数,生成指定行数的杨辉三角。
杨辉三角:
每行端点与结尾的数为1,每个数是它左上方和右上方的数的和
输入:6
输出:
[
[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1]
]
"""
def get_yang_hui_triangle(row_count):# 6
"""
获取杨辉三角
:param row_count: int类型,行数
:return: list类型,杨辉三角
"""
triangle = []
for row_index in range(row_count):# 0 1 2 3 .. 5
# 创建行
row = [None] * (row_index + 1)
# 设置首尾
row[0], row[-1] = 1, 1
# 设置中间(从第三行开始)
for i in range(1, i-1):#1
# 当前元素 = 上一行
row[i] = triangle[row_index - 1][i - 1] + triangle[row_index - 1][i]
triangle.append(row)
return triangle
print(get_yang_hui_triangle(6))
3,水仙花数
先定义函数,判断一个数是不是水仙花数;
再遍历整个列表,逐个判断是不是,是的话,添加到新列表,最后返回新列表.
"""
"水仙花数":各位数字立方和等于该数本身
定义函数,根据位数计算水仙花数
输入:3
输出:[153, 370, 371, 407]
"""
def is_daffodil(number):
"""
判断指定数字是否为水仙花数
:param number: int 类型,表示需要判断的数字
:return: bool 类型,表示是否为水仙花数。
"""
str_number = str(number)
power = len(str_number)
sum_value = 0
for item in str_number:
sum_value += int(item) ** power
return sum_value == number
def get_daffodil(n):
"""
获取指定位数的水仙花数
:param n:int类型,表示整数位数。
:return:列表类型,水仙花数。
"""
# list_list = []
# for i in range(10 ** (n - 1), 10 ** n):
# if is_daffodil(i):
# list_list.append(i)
# return list_list
return [num for num in range(10 ** (n - 1), 10 ** n) if is_daffodil(num)]
print(get_daffodil(3))
4,二分查找
思想容易理解,但是用索引值实现起来却并不容易,也就是算法比较绕,很容易出bug;
两种返回结果,也可以用return来实现;
这种比较绕的代码,多看几遍就好啦!
"""
二分查找
定义函数,在有序数字列表中找到目标值,并返回其索引。
如果目标值不在列表中,返回它可以按顺序插入的索引。
输入:[1,2,6,8,9] 8
输出:3
输入:[1,2,6,8,9] 5
输出:2
"""
def search_insert_index(list_number, target):
left = 0
right = len(list_number) - 1
while left <= right:
mid = (left + right) // 2
if list_number[mid] == target:
return mid
elif list_number[mid] < target:
left = mid + 1
else:
right = mid - 1
return left
print(search_insert_index([1, 2, 6, 8, 9], 5))