当前位置: 首页 > news >正文

Python入门教程丨2.3 流程控制、算法效率分析及优化

流程控制是用于控制程序执行顺序的机制,它决定了程序中的语句按照何种顺序被执行。

本节课将详细讲解 Python 流程控制的三大核心结构:顺序、条件和循环,并配备一些小案例。


1. 顺序结构:从头到尾依次执行

顺序结构是程序中最基础的控制方式,代码会按照书写顺序从上到下逐行执行,没有任何跳转或判断。

例如我们用输出字符串的方式模拟一个日常活动,依次完成:

print("早上起床")
print("刷牙洗脸")
print("开始学习 Python 流程控制")
print("总结笔记并练习")

程序输出:

早上起床
刷牙洗脸
开始学习 Python 流程控制
总结笔记并练习

亦或是一个简易的计算器,给出两数进行加减乘除:

num1 = 10
num2 = 5add = num1 + num2
subtract = num1 - num2
multiply = num1 * num2
divide = num1 / num2print(f"加法结果:{add}")
print(f"减法结果:{subtract}")
print(f"乘法结果:{multiply}")
print(f"除法结果:{divide}")

2. 条件结构:让代码学会“拐弯”

条件结构通过判断条件是否成立,决定执行哪段代码,从流程图上看就是一个岔路口,不同的条件走不同的路线。

在 Python 中,条件控制结构主要有 if-elsematch-case 两种形式,它们各自适用于不同场景。

2.1 if-else

我们首先来看较常用的if-else

语法格式:

if 条件:执行语句1
elif 条件:执行语句2
else:其他情况

例如我们通过输入分数,判断学生的成绩:

score = int(input("请输入分数:"))
if score >= 90:print("优秀!")
elif 70 <= score < 90:print("良好!")
elif 60 <= score < 70:print("及格!")
else:print("不及格,请努力!")

又或者是输入三条边,判断是否能构成三角形,并判定类型:

a = int(input("请输入第一条边:"))
b = int(input("请输入第二条边:"))
c = int(input("请输入第三条边:"))if a + b > c and a + c > b and b + c > a:if a == b == c:print("这是一个等边三角形!")elif a == b or b == c or a == c:print("这是一个等腰三角形!")else:print("这是一个普通三角形!")
else:print("无法构成三角形。")
2.2 match-case

match-case 是 类似于其他语言中的 switch-case。它适用于明确的值匹配或简单的模式匹配场景。

语法格式:

match 表达式:
case 情况1:执行语句1
case 情况2:执行语句2
case _:默认执行语句

适用范围:

  • 条件是固定值或简单的匹配模式,如具体的数值。
  • 多个条件分支数量较多且独立。

例如我们按照星期安排活动:

day = input("请输入星期几(如星期天):")match day:
case "星期一":print("今天是周一,安排组会!")
case "星期二":print("今天是周二,团队讨论!")
case "星期五":print("今天是周五,准备周报!")
case _:print("今天没有特别安排。")

3. 循环结构

循环结构可以让代码反复执行某些操作。Python 提供了两种主要循环:for 循环和 while 循环。


3.1 for 循环

for 循环是迭代式循环,用于遍历序列(如列表、元组、字符串等)中的每个元素,或者循环特定次数。

语法:

for 变量 in 可迭代对象:执行语句

适用范围:

  • 确定循环次数。
  • 需要遍历序列中的每个元素。

例如计算列表元素的和

numbers = [1, 2, 3, 4, 5]
total = 0
for num in numbers:total += num
print(f"列表的总和是:{total}")

嵌套循环指在一个循环内再包含另一个循环,适用于需要多层次迭代的场景。

经典案例:打印九九乘法表

for i in range(1, 10):  # 外层控制行for j in range(1, i + 1):  # 内层控制列print(f"{j}×{i}={i * j}", end="\t")  # 使用制表符对齐print()  # 每行结束后换行

输出结果:

1 × 1 = 1    
1 × 2 = 2    2 × 2 = 4    
1 × 3 = 3    2 × 3 = 6    3 × 3 = 9    
1 × 4 = 4    2 × 4 = 8    3 × 4 = 12    4 × 4 = 16    
1 × 5 = 5    2 × 5 = 10    3 × 5 = 15    4 × 5 = 20    5 × 5 = 25    
1 × 6 = 6    2 × 6 = 12    3 × 6 = 18    4 × 6 = 24    5 × 6 = 30    6 × 6 = 36    
1 × 7 = 7    2 × 7 = 14    3 × 7 = 21    4 × 7 = 28    5 × 7 = 35    6 × 7 = 42    7 × 7 = 49    
1 × 8 = 8    2 × 8 = 16    3 × 8 = 24    4 × 8 = 32    5 × 8 = 40    6 × 8 = 48    7 × 8 = 56    8 × 8 = 64    
1 × 9 = 9    2 × 9 = 18    3 × 9 = 27    4 × 9 = 36    5 × 9 = 45    6 × 9 = 54    7 × 9 = 63    8 × 9 = 72    9 × 9 = 81    

3.2 while 循环:灵活性更强的循环

while 循环是条件式循环,反复执行代码块,直到条件为 False

语法:

while 条件:执行语句

适用范围:

  • 循环次数不确定,但有明确的终止条件。
  • 循环依赖某种动态计算的条件。

例子:猜数字游戏,并不能确保第几次猜对,就需要用 while 条件判断。

import randomsecret_number = random.randint(1, 10)
attempts = 3while attempts > 0:guess = int(input("猜猜我是几(1-10):"))if guess == secret_number:print("恭喜你,猜对了!")breakelif guess < secret_number:print("小了!")else:print("大了!")attempts -= 1if attempts == 0:print(f"很遗憾,正确答案是:{secret_number}")

3.3 break 和 continue循环控制语句
  • break:提前结束循环。
  • continue:跳过本次循环,继续下一次。

例如需要过滤奇数

for i in range(10):if i % 2 == 0:continueprint(f"奇数:{i}")

4.时间复杂度与算法效率

在引入循环的概念后,我们就需要开始注重算法效率,循环在程序中往往会被反复执行,是性能瓶颈的主要来源之一。

而顺序结构是一次性执行的,运行时间是固定的,与输入规模无关。例如:

x = 5
y = x + 1
print(y)

无论输入规模多大,这些操作只执行一次,它们的时间复杂度是 O(1),无需深入分析。

循环执行的次数直接影响程序的运行时间,如果循环次数随着输入规模显著增加,会导致程序运行缓慢,甚至无法处理较大的输入。因此,分析循环的算法效率至关重要。


4.1 什么是时间复杂度?

时间复杂度是描述算法执行时间与输入规模之间关系的指标,用大O符号表示。例如:

  • O(1) 表示操作的执行时间不随问题规模变化。
  • O(n) 表示执行时间与问题规模成正比。
  • O(n^2) 表示执行时间与问题规模成平方次比。

一般来说,一次循环的时间复杂度为 O(n),嵌套循环的时间复杂度为 O(n^2),当然具体问题需要具体分析,也有可能是 O(nlog2n)。但总体来说,嵌套循环会大大增加时间复杂度,编写程序时注意用其他方式替换来优化。

时间复杂度让我们预测程序在不同输入规模下的性能,从而评估其效率。


4.2 不同时间复杂度算法对比

我们用具体的例子来说明算法对时间复杂度的影响。

假设有两个数组:找到两个数组中和为目标值的所有数对
arr1 = [1, 2, 3, 4]
arr2 = [3, 4, 5, 6]
目标是找出所有满足 x + y = 7 的数对。

1) 不使用嵌套循环解决问题(排序 + 下标)

我们可以先数组排序,然后使用两个下标(指针)来解决问题。

arr1 = [1, 2, 3, 4]
arr2 = [3, 4, 5, 6]
target = 7# 排序两个数组
arr1.sort()
arr2.sort()result = []
i, j = 0, len(arr2) - 1  # 设置两个下标,一个从 arr1 开始,一个从 arr2 末尾while i < len(arr1) and j >= 0: if arr1[i] + arr2[j] == target:result.append((arr1[i], arr2[j]))i += 1j -= 1  # 找到匹配的后,同时移动两个下标elif arr1[i] + arr2[j] < target:i += 1  # 当前和小于目标值,增加较小的数字else:j -= 1  # 当前和大于目标值,减少较大的数字print("结果:", result)

输出

结果: [(1, 6), (3, 4)]

2) 使用嵌套循环解决问题

arr1 = [1, 2, 3, 4]
arr2 = [3, 4, 5, 6]
target = 7result = []
for x in arr1:  # 遍历第一个数组for y in arr2:  # 遍历第二个数组if x + y == target:  # 检查是否满足条件result.append((x, y))print("结果(嵌套循环):", result)

输出

结果(嵌套循环): [(1, 6), (3, 4)]
4.3 算法效率分析:

在这个嵌套循环中,每个外层循环 n 次,内层循环 m次,时间复杂度为:O(nxm)=O(n^2)

若n = m = 1,000 ,循环次数=1,000×1,000=1,000,000,需要执行百万次操作。

当 n = m = 10^6 时,循环次数=10^6×10^6=10^12,需要执行万亿次操作。


而在不使用嵌套循环的算法中:

排序两个数组需要:O(nlog⁡n+mlog⁡m),遍历两个数组的时间复杂度为:O(n+m)

若 n = m = 1,000,排序时间约为 1,000log⁡1,000≈10,000 次操作,遍历时间为 1,000+1,000=2,000次操作。

总循环次数=10,000+2,000=12,000,优化了 99% 以上的计算量。

若 n = m= 10^6,总循环次数=20,000,000+2,000,000=22,000,000,相比万亿级的计算量已经大大减少。


因此在编程时,我们要特别注意:

  • 嵌套循环虽然简单直接,处理日常任务可以使用,但容易因指数增长导致效率低下。
  • 在需要处理大规模数据时,应尽量避免嵌套循环,优化算法效率,减少不必要的重复计算。

5.小结

在本节中,我们一些重要的控制结构,重点是条件判断和循环

️ 循环结构用于重复执行代码,有 for 和 while 两种形式,适合不同场景。

条件判断让程序具备决策能力,if-else 适合复杂逻辑,match-case 则简化多分支选择。

算法效率与时间复杂度密切相关,循环的次数随数据规模增加而快速增长,优化代码能显著提高性能。

相关文章:

Python入门教程丨2.3 流程控制、算法效率分析及优化

流程控制是用于控制程序执行顺序的机制&#xff0c;它决定了程序中的语句按照何种顺序被执行。 本节课将详细讲解 Python 流程控制的三大核心结构&#xff1a;顺序、条件和循环&#xff0c;并配备一些小案例。 1. 顺序结构&#xff1a;从头到尾依次执行 顺序结构是程序中最基…...

NVIDIA发布个人超算利器project digital,标志着ai元年的开启

上图NVIDIA公司创始人兼首席执行官 黄仁勋&#xff08;Jensen Huang&#xff09; 这些年被大家熟知的赛博朋克风格一直都是未来的代言词&#xff0c;可以承载人类记忆的芯片&#xff0c;甚至能独立思考的仿生人&#xff0c;现在&#xff0c;随着NVIDIA的project digital发布之后…...

spring-mvc源码分析v3.3.0

分析下springboot内嵌tomcat启动流程&#xff0c;即springboot-mvc <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>3.3.0</version> </dependency>环境…...

反爬风控设计之请求头顺序检测

本次主要讲解请求头的顺序检测的反爬实现&#xff0c; 如下使用Django写的headers请求头顺序检验算法&#xff1a; def index(request):# 获取请求头的顺序request_order list(request.META.keys())print(request_order)# 定义标准请求头顺序standard_order ["HTTP_HO…...

力扣 查找元素的位置

二分查找经典例题。 题目 要是只是从数组中用二分查找对应的元素&#xff0c;套一下模板一下就可以得出了&#xff0c;然后这题就在于其中会有多个目标元素&#xff0c;要用不同的方式在找到第一个元素时再做偏移。 时间复杂度&#xff1a;O(log n)&#xff0c;空间复杂度&am…...

Android-V lmkd 中的那些属性值

源码基于&#xff1a;Android V 相关博文&#xff1a; Android lmkd 机制详解&#xff08;一&#xff09; Android lmkd 机制详解&#xff08;二&#xff09; Android lmkd 机制从R到T 1. 汇总 属性名说明默认值 ro.lmk.debug 启动 lmkd 的debug 模式&#xff0c;会打印一…...

LabVIEW 程序中的 R6025 错误

R6025错误 通常是 运行时库 错误&#xff0c;特别是与 C 运行时库 相关。这种错误通常会在程序运行时出现&#xff0c;尤其是在使用 C 编译的程序或依赖 C 运行时库的程序时。 ​ 可能的原因&#xff1a; 内存访问冲突&#xff1a; R6025 错误通常是由于程序在运行时访问无效内…...

vmware虚拟机配置ubuntu 18.04(20.04)静态IP地址

VMware版本 &#xff1a;VMware Workstation 17 Pro ubuntu版本&#xff1a;ubuntu-18.04.4-desktop-amd64 主机环境 win11 1. 修改 VMware虚拟网络编辑器 打开vmware&#xff0c;点击顶部的“编辑"菜单&#xff0c;打开 ”虚拟化网络编辑器“ 。 选择更改设置&#…...

mybatis延迟加载、缓存

目录 一、所需表 二、延迟加载 1.延迟加载概念 2.立即加载和延迟加载的应用场景 3.多对一延迟加载查询演示 (1)实体类 User Account (2)AccountMapper接口 (3)AccountMapper.xml (4)UserMapper接口 (5)UserMapper.xml (6)在总配置文件(mybatis-config.xml)中开启延…...

云上贵州多彩宝荣获仓颉社区先锋应用奖 | 助力数字政务新突破

在信息技术应用创新的浪潮中&#xff0c;仓颉社区吸引了众多企业和开发者的积极参与&#xff0c;已有多个应用成功落地&#xff0c;展现出蓬勃的创新活力。仓颉编程语言精心遴选了在社区建设、应用创新、开源共建、技术布道等方面做出突出贡献的优秀项目应用&#xff0c;并颁发…...

设计模式02:结构型设计模式之适配器模式使用情景及其基础Demo

1.适配器模式 用途&#xff1a;接口兼容评价&#xff1a;复杂、冗余、难以调试&#xff0c;个人认为直接在旧系统那里封装一个新实现调用旧实现就好了场景&#xff1a;系统A、B、C想调用同一个功能接口&#xff0c;但是实现细节存在差异时&#xff08;其实就是入参和出参转化处…...

镭速大文件传输视频文件预览实现原理

镭速可以支持视频预览&#xff0c;在测试过程中需要大量不同格式的视频&#xff0c;如果直接去找各种格式的视频不太现实&#xff0c;所以就会用到一个视频格式转换的工具ffmpeg&#xff0c;本文将介绍ffmpeg的基本使用方法。FFmpeg 是一个免费开源的音视频处理工具&#xff0c…...

Mac上安装Label Studio

在Mac上安装Anaconda并随后安装Label Studio&#xff0c;可以按照以下步骤进行&#xff1a; 1. 在Mac上安装Anaconda 首先&#xff0c;你需要从Anaconda的官方网站下载适用于Mac的安装程序。访问Anaconda官网&#xff0c;点击“Download Anaconda”按钮&#xff0c;选择适合M…...

git操作(Windows中GitHub)

使用git控制GitHub中的仓库版本&#xff0c;并在Windows桌面中创建与修改代码&#xff0c;与GitHub仓库进行同步。 创建自己的GitHub仓库 创建一个gen_code实验性仓库用来学习和验证git在Windows下的使用方法&#xff1a;https://github.com/Martianing/gen_code git初始设置…...

低代码平台:技术复杂性的系统简化

在传统开发模式下&#xff0c;应用构建需要经历需求分析、代码开发、测试部署等多环节&#xff0c;流程繁琐且耗时&#xff0c;往往成为企业技术创新的瓶颈。低代码平台通过模块化和自动化技术重新定义开发流程&#xff0c;使开发者能够在较短时间内实现复杂的应用功能&#xf…...

物联网网关Web服务器--lighttpd服务器部署与应用测试

以下是在国产ARM处理器E2000飞腾派开发板上部署 lighttpd 并进行 CGI 应用开发的步骤&#xff1a; 1、lighttpd简介 Lighttpd 是一款轻量级的开源 Web 服务器软件&#xff0c;具有以下特点和功能&#xff1a; 特点 轻量级&#xff1a;Lighttpd 在设计上注重轻量级和高效性&a…...

Flutter+vsCode 安装问题记录

VSCode在安装完AndroidSDK以及相关插件后&#xff0c;运行Flutter项目时选择模拟器提示&#xff1a;avdmanager is missing from the Android SDK&#xff0c;确保环境变量中存在ANDROID_HOME&#xff0c;且执行了flutter config --android-sdk 地址后&#xff0c;如果还提示&a…...

【CompletableFuture实战】

CompletableFuture实战 前言 前言 过去的一年&#xff0c;匆匆忙忙&#xff0c;换了一次工作&#xff0c;写博客的习惯就落下了&#xff0c;总之&#xff0c;有点懈怠。希望今年能重拾信心&#xff0c;步入正规&#xff01; CompletableFuture的用法网上资料颇多&#xff0c;…...

【k8s面试题2025】3、练气中期

体内灵气的量和纯度在逐渐增加。 文章目录 在 Kubernetes 中自定义 Service端口报错常用控制器Kubernetes 中拉伸收缩副本失效设置节点容忍异常时间Deployment 控制器的升级和回滚日志收集资源监控监控 Docker将 Master 节点设置为可调度 在 Kubernetes 中自定义 Service端口报…...

【高可用自动化体系】自动化体系

架构设计的愿景就是高可用、高性能、高扩展、高效率。为了实现架构设计四高愿景&#xff0c;需要实现自动化系统目标&#xff1a; 标准化。 流程自助化。 可视化&#xff1a;可观测系统各项指标、包括全链路跟踪。 自动化&#xff1a;ci/cd 自动化部署。 精细化&#xff1a…...

Spring boot框架下的RocketMQ消息中间件

1. RocketMQ 基础概念 1.1 核心概念 以下是 RocketMQ 核心概念在 Spring Boot 的 Java 后端代码中的实际使用方式&#xff1a; Producer&#xff08;生产者&#xff09; 定义&#xff1a;Producer 是负责发送消息到 RocketMQ 的组件。它可以将消息发送到指定的 Topic。 实…...

http转化为https生成自签名证书

背景 项目开发阶段前后交互采用http协议&#xff0c;演示环境采用htttps协议 &#xff0c;此处为个人demo案例 组件 后端&#xff1a;springBoot 前端&#xff1a;vue web 服务&#xff1a;tomcat 部署环境&#xff1a;linux 生成自签名证书 创建目录 存储证书位置 # mkdir -p…...

关于2025年智能化招聘管理系统平台发展趋势

2025年&#xff0c;招聘管理领域正站在变革的十字路口&#xff0c;全新的技术浪潮与不断变化的职场生态相互碰撞&#xff0c;促使招聘管理系统成为重塑企业人才战略的关键力量。智能化招聘管理系统平台在这一背景下迅速崛起&#xff0c;其发展趋势不仅影响企业的招聘效率与质量…...

CentOS 9 Stream 上安装 Node.js 18.20.5

要在 CentOS 9 Stream 上安装 Node.js 18.20.5&#xff0c;可以按照以下步骤操作&#xff1a; 1. 安装依赖 首先&#xff0c;确保你已经更新了系统并安装了必要的依赖包。 sudo dnf update -y sudo dnf install -y gcc-c make2. 安装 Node.js 18.20.5 Node.js 官方提供了一…...

NSIS 创建一键安装程序

nsis 安装redis 、mysql 、jdk navicat、 notepad、 使用NSIS 创建一键安装程序 分为两步 下载 NSIS编写 一键安装代码 1.16脚本 ; 请求管理员权限运行安装程序 RequestExecutionLevel admin; 该脚本使用 HM VNISEdit 脚本编辑器向导产生; 安装程序初始定义常量 !define PRO…...

NanoKVM简单开箱测评和拆解,让普通电脑实现BMC/IPMI远程管理功能

Sipeed推出了NanoKVM&#xff0c;简直是没有BMC的台式机和工作站的福音。有了这个就可以轻松实现以往服务器才有的远程管理功能。 NanoKVM 简介 Lichee NanoKVM 是基于 LicheeRV Nano 的 IP-KVM 产品&#xff0c;继承了 LicheeRV Nano 的极致体积 和 强大功能。 NanoKVM 包含…...

【混合开发】CefSharp+Vue桌面应用程序开发

为什么选择CefSharpVue做桌面应用程序 CefSharp 基于 Chromium Embedded Framework (CEF) &#xff0c;它可以将 Chromium 浏览器的功能嵌入到 .NET 应用程序中。通过 CefSharp&#xff0c;开发者可以在桌面应用程序中集成 Web 技术&#xff0c;包括 HTML、JavaScript、CSS 等…...

2024最新版JavaScript逆向爬虫教程-------基础篇之Chrome开发者工具学习

目录 一、打开Chrome DevTools的三种方式二、Elements元素面板三、Console控制台面板四、Sources面板五、Network面板六、Application面板七、逆向调试技巧 7.1 善用搜索7.2 查看请求调用堆栈7.3 XHR 请求断点7.4 Console 插桩7.5 堆内存函数调用7.6 复制Console面板输出 工…...

下定决心不去读研了。。。

大家好&#xff0c;我是苍何。 之前发表过一篇文章&#xff0c;表达了自己读研的困惑和纠结&#xff0c;得到了大家很多的建议&#xff0c;也引起了很多人的共鸣&#xff0c;在留言区分享了自己的故事&#xff0c;看着这些故事&#xff0c;我觉得都够苍何写一部小说了。 可惜苍…...

Java21 正则表达式

在 Java 21 中&#xff0c;正则表达式主要通过 java.util.regex 包提供支持&#xff0c;其核心组件包括 Pattern、Matcher 和 String 类中自带的方法&#xff08;如 replaceAll 和 matches&#xff09;。以下是关于正则表达式在 Java 21 中的详细介绍及一些新的特性或用法。 核…...

Docker安装PostGreSQL docker安装PostGreSQL 完整详细教程

Docker安装PostGreSQL docker安装PostGreSQL 完整详细教程 Docker常用命令大全Docker 运行命令生成Docker 上安装 PostGreSQL 14.15 的步骤&#xff1a;1、拉取 PostGreSQL 14.15 镜像2、创建并运行容器3、测试连接4、设置所有IP都可以运行连接进入容器内 修改配置文件关闭容器…...

leetcode:205. 同构字符串(python3解法)

难度&#xff1a;简单 给定两个字符串 s 和 t &#xff0c;判断它们是否是同构的。 如果 s 中的字符可以按某种映射关系替换得到 t &#xff0c;那么这两个字符串是同构的。 每个出现的字符都应当映射到另一个字符&#xff0c;同时不改变字符的顺序。不同字符不能映射到同一个字…...

【Javascript Day9】对象定义、数组中对象元素排序、对象在内存中存储方法、对象构建联系

目录 . 取值运算符 > 用于对象属性或方法的调用操作 [] 取值运算符 > 可用于数组下标或者对象属性的取值操作 数组对象的排序 对象在内存中存储方式 对象的三种定义方式 1. 字面量对象 2. 基于Object构造对象 3. 自定义对象构造器创建对象 对象的构建练习 . 取值…...

运维作业一

1、shell 脚本写出检测 /tmp/size.log 文件如果存在显示它的内容&#xff0c;不存在则创建一个文件将创建时间写入。 2、写一个 shel1 脚本,实现批量添加 20个用户,用户名为user01-20,密码为user 后面跟5个随机字符。 首先&#xff0c;获得随机字符&#xff0c;需下载pwgen&am…...

数仓建模(三)建模三步走:需求分析、模型设计与数据加载

本文包含&#xff1a; 数据仓库的背景与重要性数据仓库建模的核心目标本文结构概览&#xff1a;需求分析、模型设计与数据加载 目录 第一部分&#xff1a;需求分析 1.1 需求分析的定义与目标 1.2 需求分析的步骤 1.2.1 业务需求收集 1.2.2 技术需求分析 1.2.3 成果输出…...

C语言的网络编程

C语言的网络编程 引言 随着互联网的快速发展&#xff0c;网络编程已经成为计算机科学与技术领域中不可或缺的一部分。C语言作为一种底层语言&#xff0c;以其高效、快速和灵活的特性&#xff0c;广泛应用于网络编程中。本文将深入探讨C语言在网络编程中的应用&#xff0c;包括…...

EE213 Lab3 virtuoso NAND NOR INV XOR HA designlayout(min size layout method)

目录 0 前言 1 设计目标 2 减小面积的layout画法 3 NAND 4 NOR 5 INV 6 XOR 7 HA 0 前言 记录一下来到skd上的强度比较大的一门课&#xff0c;数字集成电路2的lab设计还是蛮好的&#xff0c;该帖非详细教程只是单纯的写一些思虑并用作笔记&#xff0c;新手小白欢迎交…...

Qt——QTableWidget 限制单元格输入范围的方法(正则表达式输入校验法、自定义代理类MyItemDelegrate)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》...

mono3d汇总

lidar坐标系 lidar坐标系可以简单归纳为标准lidar坐标系和nucense lidar坐标系&#xff0c;参考链接。这个坐标系和车辆的ego坐标系是一致的。 标准lidar坐标系 opendet3d&#xff0c;mmdetection3d和kitt都i使用了该坐标系 up z^ x front| /| /left y <------ 0kitti采…...

机器学习第一道菜(一):线性回归的理论模型

机器学习第一道菜&#xff08;一&#xff09;&#xff1a;线性回归的理论模型 一、问题&#xff1a;千金买笑1.1 散点图1.2 机器学习能搞啥 二、模型的建立2.1 线性回归2.2 回归模型 前面讲了机器学习的“四大绝技”&#xff0c;今天&#xff0c;开始研究第一绝技“回归”&…...

Unity的Transform类

1.position 游戏对象的世界坐标以(0, 0, 0)为原点 2.localPosition 本地坐标&#xff0c;相对父物体坐标 3.eulerAngles 相对世界的欧拉角 4.localEulerAngles 本地欧拉角 5.rotation 相对世界四元数 6.localRotation 本地四元…...

指针的进阶

指针的主题&#xff0c;我们在初级阶段的《指针》章节已经接触过了&#xff0c;我们知道了指针的概念&#xff1a; 1. 指针就是个变量&#xff0c;用来存放地址&#xff0c;地址唯一标识一块内存空间。 2. 指针的大小是固定的4/8个字节&#xff08;32位平台/64位平台&#xff0…...

每日学习30分轻松掌握CursorAI:Cursor插件系统与扩展功能

Cursor插件系统与扩展功能 一、课程概述 今天我们将学习Cursor AI的插件系统&#xff0c;了解如何通过插件扩展和增强IDE功能。由于Cursor AI基于VS Code开发&#xff0c;我们可以利用丰富的VS Code插件生态系统。 1.1 学习目标 了解插件系统原理掌握插件安装管理使用常用开…...

【WEB】网络传输中的信息安全 - 加密、签名、数字证书与HTTPS

文章目录 1. 概述2. 网络传输安全2.1.什么是中间人攻击2.2. 加密和签名2.2.1.加密算法2.2.2.摘要2.2.3.签名 2.3.数字证书2.3.1.证书的使用2.3.2.根证书2.3.3.证书链 2.4.HTTPS 1. 概述 本篇主要是讲解讲一些安全相关的基本知识&#xff08;如加密、签名、证书等&#xff09;&…...

Dexie.js内存管理技巧:在大型数据集操作中避免浏览器崩溃

Dexie.js 内存管理技巧&#xff1a;避免浏览器崩溃 在使用 Dexie.js 操作 大型数据集 时&#xff0c;如果不注意内存管理&#xff0c;可能会导致浏览器内存溢出&#xff08;OOM&#xff0c;Out of Memory&#xff09;或崩溃。因此&#xff0c;以下 内存管理技巧 可用于优化性能…...

vscode项目依赖问题

必读 一定要将前端下拉的项目备份一下&#xff0c;很容易运行导致依赖报错&#xff0c;重新下载 命令 使用幽灵分解器安装 pnpm install 替代 npm install 设置淘宝NPM镜像源 yarn config set registry https://registry.npmmirror.com 查看目前依赖包的版本 npm list ant-d…...

LLMs之RAG:《EdgeRAG: Online-Indexed RAG for Edge Devices》翻译与解读

LLMs之RAG&#xff1a;《EdgeRAG: Online-Indexed RAG for Edge Devices》翻译与解读 导读&#xff1a;这篇论文针对在资源受限的边缘设备上部署检索增强生成 (RAG) 系统的挑战&#xff0c;提出了一种名为 EdgeRAG 的高效方法。EdgeRAG 通过巧妙地结合预计算、在线生成和缓存策…...

宇泰串口卡驱动在Ubuntu22.04编译、安装汇总

从官网下载驱动官网地址 上传到Ubuntu, 目录结构如下&#xff1a; 驱动源代码: 驱动代码是基于开源项目编译来的 编译路径不能有中文路径&#xff0c;否则可能有类似错误 源码是基于Linux2.3内核编译&#xff0c;我当前是6.8.0-51&#xff0c;数据结构有升级&#xff0c;需要调…...

python管理工具:conda部署+使用

python管理工具&#xff1a;conda部署使用 一、安装部署 1、 下载 - 官网下载&#xff1a; https://repo.anaconda.com/archive/index.html - wget方式&#xff1a; wget -c https://repo.anaconda.com/archive/Anaconda3-2023.03-1-Linux-x86_64.sh2、 安装 在conda文件的…...

(三)html2canvas将HTML 转为图片并实现下载

将 HTML 转为图片并实现下载&#xff0c;通常可以使用一个叫做 html2canvas 的 JavaScript 库。html2canvas 能够将 HTML 元素及其样式渲染成一个画布 (Canvas)&#xff0c;然后将该画布转换为图片格式&#xff08;如 PNG 或 JPEG&#xff09;&#xff0c;最终提供下载功能。 …...