首页 > 其他分享 >day16

day16

时间:2023-12-19 17:48:45浏览次数:31  
标签:f1 name res age 算法 day16 print

1.三元表达式

# 针对以下需求
def func(x, y):
    if x > y:
        return x
    else:
        return y


res = func(1, 2)
print(res)

# 三元表达式,可以用一行代码搞定上述代码
# 语法格式:条件成立时要返回的值 if 条件 else 条件不成立时要返回的值
x = 1
y = 2
res = x if x > y else y
print(res)

2.列表生成式

# 列表生成式
l = ['alex_dsb', 'egon_dsb', 'wxx_dsb', 'wangmiaolu']
new_l = []
for name in l:
    if name.endswith('dsb'):
        new_l.append(name)

new_l = [name for name in l if name.endswith('dsb')]
# new_l=[name for name in l ]
print(new_l)

3.列表生成式案例

# 案例1:
# 把所有的小写字母全变成大写
new_l = [name.upper() for name in l]
print(new_l)

# 把所有的名字去掉后缀 dsb
new_l = [name.replace('_dsb', '') for name in l]
print(new_l)


# 案例2:
l=[]
for i in range(100):
    l.append('egg%s' %i)
print(l)

l=['egg%s' %i for i in range(100)]
l=['egg%s' %i for i in range(1000) if i > 10]
print(l)

4.其他生成式

# 2.字典生成式
keys = ['name', 'age', 'gender']
dic = {key: None for key in keys}
print(dic)

items = [('name', 'egon'), ('age', 18), ('gender', 'male')]
res = {k: v for k, v in items if k != 'gender'}
print(res)

# 3.集合生成式
keys = ['name', 'age', 'gender']
set1 = {key for key in keys}
print(set1, type(set1))

# 4.生成器表达式
g = (i for i in range(10) if i > 3)
# !!!!!!!强调!!!!!!!
# 此刻g内部一个值也没有

print(g, type(g))
print(next(g))

with open('笔记.txt', mode='rt', encoding='utf-8') as f:
    # # 方式一:
    # res = 0
    # for line in f:
    #     res += len(line)
    # print(res)

    # # 方式二:
    # size_of_line = [len(line) for line in f]
    # res = sum(size_of_line)
    # print(res)

    # 方式三:效率更高
    # res = sum((len(line) for line in f))
    # 上述可以简写为如下形式
    res = sum(len(line) for line in f)
    print(res)

5.函数递归介绍

import sys

# 默认递归最大为1000层
res1 = sys.getrecursionlimit()
print(res1)
# 默认可以改为2000层
res2 = sys.setrecursionlimit(2000)

# 一:递归的定义
# 函数的递归调用:是函数嵌套调用的一种特殊形式
# 具体是指:
#         在调用一个函数的过程中又直接或者间接地调用到本身
#
# 直接调用本身
def f1():
    print('是我是我还是我')
    f1()

f1()


# 间接调用本身
def f1():
    print('=======>f1')
    f2()

def f2():
    print('=======>f2')
    f1()

f1()

# 一段代码的循环运行的方案有两种
# 方式一:while、for循环
while True:
    print(1111)
    print(2222)
    print(3333)

# 方式二:递归的本质就是循环
def f1():
    print(11111)
    print(22222)
    print(33333)
f1()

# 二:需要强调的一点是:
# 递归调用buyiu不应该无限地调用下去,必须在某种条件下结束递归调用
n = 0
while n < 10:
    print(n)
    n += 1

def f1(n):
    if n == 0:
        return
    print(n)
    n += 1
    f1(n)

f1(0)

6.递归调用的两个阶段

# 三:递归的两个阶段
# 回溯:一层一层调用下去
# 递推:满足某种结束条件,结束递归调用,然后一层一层返回

# age(5)=age(4)+2
# age(4)=age(3)+2
# age(3)=age(2)+2
# age(2)=age(1)+2
# age(1)=18

def age(n):
    if n == 1:
        return 18
    return age(n - 1) + 2


res = age(1)
print(res)

7.函数递归调用案例

# 四:递归的应用
l = [1, 2, [3, [4, [5, [6, [7, [8, [9, 10, 11, [12, [13]]]]]]]]]]


def f1(list1):
    for x in list1:
        if type(x) is list:
            # 如果是列表,应该再循环、再判断,即重新运行本身代码
            f1(x)
        else:
            print(x)


f1(l)

8.算法简介及二分法

算法简介

1.什么是算法
	算法就是解决问题的有效方法 不是所有的算法都很高效也有不合格的算法
2.算法应用场景
	推荐算法(抖音视频推送 淘宝商品推送)
	成像算法(AI相关)......
 	几乎涵盖了我们日常生活中的方方面面
3.算法工程师要求
	待遇非常好 但是要求也非常高
4.算法部门
	不是所有的互联网公司都养得起算法部分 只有大型互联网公司才有
	算法部门类似于药品研发部分
5.二分法
	是算法中最简单的算法 甚至都称不上是算法

二分法

"""
二分法使用要求
    待查找的数据集必须有序
二分法的缺陷
    针对开头结尾的数据 查找效率很低
常见算法的原理以及伪代码
    二分法、冒泡、快拍、插入、堆排、桶排、数据结构(链表 约瑟夫问题 如何链表是否成环)
"""
# 算法:是高效解决问题的办法
# 算法之二分法

# 需求:有一个按照从小到大顺序排列的数字列表
#      需要从该数字列表中找到我们想要的那个数字
#      如何做更高效???

nums = [-3, 4, 7, 10, 13, 21, 43, 55, 66, 77]
find_num = 10

# 方案一:整体遍历效率太低
for num in nums:
    if num == find_num:
        print('find it')
        break

# 方案二:二分法伪代码
"""
def binary_search():
    mid_val=找列表中间的值
    if find_num>mid_val:
        # 接下来的查找应该是在列表的右半部分
        列表=列表切片右半部分
        binary_search(find_num,列表)
    elif find_num<mid_val:
        # 接下来的查找应该是在列表的左半部分
        列表=列表切片再左半部分
        binary_search(find_num,列表)
    else:
        print('find it')
"""

二分法的具体实现

nums = [3, 5, 7, 11, 13, 23, 24, 76, 103, 111, 201, 202, 250, 303, 341]

def binary_search(list1, find_num):
    print(list1)
    if len(list1) == 0:
        print('not exist')
        return
    mid_index = len(list1) // 2
    if find_num > list1[mid_index]:
        print('in the right')
        binary_search(list1[mid_index + 1:], find_num)
    elif find_num < list1[mid_index]:
        print('in the left')
        binary_search(list1[:mid_index], find_num)
    else:
        print('find it')

binary_search(nums, 111)

标签:f1,name,res,age,算法,day16,print
From: https://www.cnblogs.com/wangmiaolu/p/17914314.html

相关文章

  • day16监控体系部署管理-K8S集群层面监控-基于Prometheus的HPA自动伸缩 (7.1-7.2)
    一、打造基于Prometheus的全方位监控平台1.1前言官网:https://prometheus.io/docs/prometheus/latest/getting_started/灵活的时间序列数据库定制各式各样的监控规则Prometheus的开发人员和用户社区非常活跃独立的开源项目,不依赖于任何公司继Kubernetes之后第二个入驻的项......
  • Day16 内部类
    1.内部类的含义内部类就是在一个类的内部再定义一个类。比如A类中定义了一个类B,那么B就是A的内部类,A是B的外部类classA{//外部类classB{//内部类}}内部类可以分为:成员内部类静态内部类局部内部类匿名内部类默认:如果声明内部类时不使用任何修饰......
  • Day16 三元运算符
    三元运算符扩展赋值运算符+=-=*=/=packageoperator;publicclassDemo07{publicstaticvoidmain(String[]args){inta=10;intb=20;a+=b;//a=a+ba-=b;//即a=a-b不推荐比较偷懒//字符串连接......
  • pythonDay16
    wraps装饰器补充 有参函数补充,特殊情况 有参函数装饰器,登录功能当中当账号密码来源于不同地方时 有参函数装饰器有语法糖(解决方案一,但比较复杂)有语法糖的解决方案二 有参装饰器的模板 什么是可迭代对象、什么叫迭代器,如何用 迭代器如何取值 for循环也可以......
  • day16 阶段总结和考试
    day16阶段总结课程目标:对第二模块“函数和模块”阶段的知识点进行总结和考试,让学员更好的掌握此模块的相关知识。课程概要:知识补充阶段总结(思维导图)考试题1.知识补充1.1nolocal关键字在之前的课程中,我们学过global关键字。name='root'defouter():name......
  • 【noip赛前20天冲刺集训 day16】星空遗迹
    Description在石头剪刀布中,一共有三种手势:\(R(Rock),P(Paper),S(Scissors)\),其中\(R\)能赢\(S\),\(S\)能嬴\(P\),\(P\)能赢\(R\)。现在,我们定义\(w(x,y)\)是\(x\)和\(y\)中获胜的手势,特别地,如果\(x\)和\(y\)相同(也就是平局),那么\(w(x,y)\)也和\(x,y\)均......
  • java项目实践-webapp-mytomcat-day16
    目录1.http协议2.自定义的web框架3.具体实现4.启动1.http协议CS架构建立连接“三次握手”断开连接“四次挥手”三次握手:client:可以与你建立连接吗?server:可以的client:我也可以了四次挥手:client:我要断开server:可以断开server:我要断开client:可以断开双方都有......
  • Day16 函数对象--函数嵌套调用--闭包函数
    1.Day15_复习1: 2.Day15_复习2: 3.Day15_复习3: 4.函数对象_可以赋值_可以当做函数参数传给另外一个函数: 5.函数对象_可以当做函数另外一个函数的返回值_可以当做容器类型的一个元素: 6.函数对象初步实现ATM流程: 7.函数对象应用案例优化: 8.函数的嵌套调用: 9.......
  • ## day16 - 二叉树part03
    day16-二叉树part03力扣104.二叉树的最大深度思路:最大深度,即为顶点高度。如果想求高度,人类思维的角度,就是从底层开始算,往上一层+1,加到顶点就是高度,也就是最大深度。因此要用后序遍历,这样可以左右根的顺序进行遍历,从而一层一层向上返回结果,返回到根节点的时候就计算出来了最......
  • 算法训练day16 LeetCod 104
    算法训练day16LeetCod104.111.222104.二叉树的最大深度题目104.二叉树的最大深度-力扣(LeetCode)题解代码随想录(programmercarl.com)递归采用后序的遍历顺序,在根节点处做高度数据的处理classSolution{public:intgetdepth(TreeNode*node){......