Day09/2------练习中的代表性代码

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))
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值