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

Python 编写函数

文章目录

    • 条件语句
    • 循环语句
    • 自定义函数
      • 函数参数的传递类型
      • 函数的参数传入方法
    • lambda, map, filter, reduce 函数
    • try-except 语句调试
    • 一些常用的内置函数

条件语句

编写程序时,经常用到一些条件或判断,需要用到 if 语句,它的字面意思是:如果(if)满足条件,做什么,否则(else)做什么。例如,下面一段代码:

a = 10
if a > 10:print("Value of a is greater than 10")
else:print("Value of a is not greater than 10")
Value of a is not greater than 10

这段代码的意思是,如果 a 比 10 大,则输出 “Value of a is greater than 10”,否则输出 “Value of a is not greater than 10”。if 语句还可以跟 elif (else if 的意思),再次判断一个条件。

if 语句的一般用法
if 条件1:
    statement_block_1
elif 条件2:
    statement_block_2
else:
    statement_block_3

上面 if 语句块的执行顺序为:如果条件1 为真,将执行 “statement_block_1” 块语句,如果条件1 为假,将判断 “条件2”,如果条件2 为真,将执行 “statement_block_2” 块语句,如果条件2 为假,将执行"statement_block_3"块语句。举例:

wage = int(input("请输入你的月薪: "))
print("")
if wage <= 3000:print("贫困户")
elif wage <= 12000:print("平均水平")
else:print("土豪")
请输入你的月薪: 4000平均水平

上面语句的意思是,若输入的月薪小于 3000,则输出“贫困户”,否则若月薪在 3000 与 12000 之间,输出“平均水平”,若月薪在 12000 之上,则输出“土豪”。if 语句里面还可以嵌套 if 语句,进一步增加判断条件,举例:

wage = int(input("请输入你的月薪: "))
print("")
if wage <= 3000:print("贫困户")if 2000 <= wage < 3000:print("贫困户中的一般贫")if wage <= 1000:print("贫困户中的特贫")
else:print("不是贫困户")
请输入你的月薪: 3000贫困户

在上面的程序中,若月薪小于等于 3000,又嵌套了两个条件进一步判断。

if 中条件判断中常用的符号有:>(大于), <(小于), >=(大于等于), <=(小于等于), ==(等于), !=(不等于)。需要注意的是,在编程语言的判断语句中,两个等号 == 表示判断是否相等(a == 3 表示判断 a 是否等于 3),而一个等号 = 表示的是变量赋值(a = 3 表示将 a 赋值为 3)

循环语句

循环语句一般有两种,for 语句与 while 语句。for 循环可以遍历任何序列的项目,如一个列表、元组、集合或者一个字符串。for 循环的一般用法如下:

for 循环语句的一般用法
for variable in sequence:
    statements

for 循环的作用是:遍历序列(sequence)中的所有元素,执行命令语句 statements,举例:

for i in range(3):print(i)
0
1
2

输出结果为 0, 1, 2,上述代码的作用是,对于 range(3) 中的每一个元素,打印元素。for 循环经常结合序列函数 range() 一起使用:range(a) 表示从 0 到 a-1 的一个数列,range(a, b) 表示从 a 到 b-1 的一个数列,range(a, b, c) 表示从 a 到 b-1,步长为 c 的一个数列。

另一个 while 循环语句的一般格式为:

while 循环语句的一般用法
while  判断条件:
       statements

它的作用是,只要满足 while 的判断条件,则一直执行 while 下面的执行语句 statements,举例:

a = 1
while a < 4:print(a)a = a + 1
1
2
3

上面语句的作用是:只要 a 小于 4,则将 a 值打印出来并将 a 值加 1,在 a 等于 4 时停止执行 while语句。

for 循环与 while 循环经常结合breakcontinue语句,break语句可以跳出循环体,而continue语句用来告诉 Python 跳过当前循环块中的剩余语句,然后继续进行下一轮循环。举例:

for i in range(3):if i == 1:breakprint(i)
print('循环结束')
0
循环结束

上面代码中,在 i 等于 1 时执行break跳出了整个循环体。

若改为continue语句:

for i in range(3):if i == 1:continueprint(i)
print('循环结束')
0
2
循环结束

上面代码中,在 i 等于 1 时执行continue跳出了当前循环,执行剩下的循环。

在 while 循环中,breakcontinue的例子:

a = 1
while a < 5:a = a + 1if a == 3:break print(a)
print('循环结束')
2
循环结束
a = 1
while a < 5:a = a + 1if a == 3:continue print(a)
print('循环结束')
2
4
5
循环结束

自定义函数

Python 提供了许多内建函数,比如 print(),但也可以自己创建函数,这被叫做用户自定义函数。掌握了自定义函数后,就能用 Python 实现很多自己想要的功能了。Python 自定义函数使用def关键字,一般用法如下:

def 自定义函数的一般用法
def 函数名(参数列表):
       statements

下面的几行代码定义了一个加和函数:

def add(x1, x2):z = x1 + x2return z

该自定义函数有以下几个特点:

def关键字 def 开头
add 函数的名字,可以自命名
(x1, x2)小括号里面是函数的输入参数
:冒号,换行写函数内容;若不换行,整个函数只能有一行代码
return关键字,后面跟函数的返回值,即输出结果

函数的返回值可以有一个或多个,下面的代码返回多个值,既返回两个参数的加和结果,又返回两个参数的值。

def add(x1, x2):z = x1 + x2return z, x1, x2

调用函数时,通过输入函数名字,并把函数的参数传递进去,例如:

def add(x1, x2):z = x1+x2return zx1 = 10
x2 = 6
print(add(x1, x2))
16

在多个返回值时,有时候需要用新的变量表示各个返回值,可以用下面的方式赋值:

def add(x1, x2):z = x1+x2return z, x1, x2x1 = 10
x2 = 6
sums, a, b = add(x1, x2) # 用新变量赋值
print(sums)
print(a)
print(b)
16
10
6

若某个返回值不使用,可以用下划线_替代该变量名。

def add(x1, x2):z = x1+x2return z, x1, x2x1 = 10
x2 = 6
sums, _, b = add(x1, x2) # 用下划线 _ 替代第二个返回值
print(sums)
print(b)
16
6

上面的代码中,用下划线替代第二个返回参数值,用新的变量名替代其他参数值。

函数也可以不带输入参数,即小括号里面可以没有内容,例如,下面的代码打印一句话 ``Hello, world!":

def hello():print('Hello, world!')hello()
Hello, world!

函数参数的传递类型

根据输入参数的值是否可以改变,函数的参数传递类型包括以下两种:

  • 不可变类型:数字,字符串,元组
  • 可变类型:列表,字典,集合
对于不可变类型,函数调用参数后,参数原来的值不变,例如:
def changeNum(a):a = 10b = 2
changeNum(b)
print(b)    # 结果还是 2
2

上面的代码中,由于传递的是数字类型,调用函数后,参数原来的数值不变,对于字符串或元组类型,传递时也是这样。

对于可变类型,函数调用参数后,参数原来的值也改变,例如:

def changeList(mylist):mylist.extend([1, 2, 3])return mylistlistTry = [10, 20, 30]
changeList(listTry)
print(listTry)  # 结果是 [10, 20, 30, 1, 2, 3],改变了列表原来的值
[10, 20, 30, 1, 2, 3]

函数的参数传入方法

函数的参数传入方法主要有4种类型:

  • 顺序传入
  • 赋值传入
  • 默认参数值传入
  • 不定长参数传入

对于顺序传入,函数的参数值跟输入的顺序一一对应:

def minus(x1, x2):z = x1 - x2return zprint(minus(10, 6))
4

在上面的代码中,调用 minus 函数,按照参数的顺序,认为 x1 的值为 10, x2 的值为 6。

赋值传入的意思是:在调用函数时,可以在输入参数时直接给参数赋值,Python 自动根据括号内的参数名匹配参数值,例如:

def minus(x1, x2):z = x1 - x2return zprint(minus(x2 = 10, x1 = 6))
-4

在上面的代码中,调用 minus 函数时,在小括号内对参数进行了赋值,认为 x2 的值为 10, x1 的值为 6。

Python 在定义函数时,可以设置参数的默认值,当调用参数时,若没有给参数赋值,则使用参数的默认值,例如:

def minus(x1, x2 = 6):z = x1 - x2return zprint(minus(x1 = 10))  # 输出:4,没有传递参数值时默认参数值
print(minus(x1 = 10, x2 = 5))  # 输出:5,有传递参数值时,覆盖默认参数值
4
5

当一个函数传递多个参数,但不太确定究竟是多少个时,可以用 *args 表示多个参数,例如:

def plus(x, *args):print('x is %d' % x)for var in args:x += varprint('final x is %d' % x)plus(3, 4, 5) # *args 是 4, 5
plus(3, 4, 5, 6) # *args 是 4, 5, 6
x is 3
final x is 12
x is 3
final x is 18

可以用 **args 来传递不定长的多个赋值的参数,例如:

def minus(x1, **args):sum = 0for key in args:sum += args[key]return x1 - sumprint(minus(10, x2 = 3, x3 = 5))
7

上面的代码中,用 **args 表示 x2 = 3, x3 = 5。

lambda, map, filter, reduce 函数

Python 使用lambda来创建匿名函数。所谓匿名,即不再使用 def 语句这样标准的形式定义一个函数。lambda 函数只有一行,用一个冒号分割传递参数与函数的返回值。非常简洁,在 Pandas 处理数据时经常结合 apply 函数使用。

add = lambda x1, x2: x1 + x2
print(add(10, 6)) 
16

也可以结合 if-else 语句定义 lambda 函数。

Max = lambda a, b: a if(a > b) else b
print(Max(12, 20))
20

map(fun, iter) 对每一个可迭代对象 iter 中的元素应用 fun 函数,并返回一个 map 类型的可迭代对象。fun 函数既可以使用 lambda 匿名函数,也可以用 def 自定义一个函数。

a = [1, 2, 3]
b = map(lambda x: x**2, a) # 对 a 中每个元素平方
b
<map at 0x7fda51470340>

可以用list()函数将这个可迭代对象转化为 list 类型:

list(b)
[1, 4, 9]
``filter(fun, iter)`` 对可迭代对象 iter 中的每一个元素应用判断函数 fun 过滤,并返回一个 filter 类型的可迭代对象。
a = [1, 2, 3]
b = filter(lambda x: x >= 2, a) # 将大于等于 2 的元素过滤出来
list(b)
[2, 3]

reduce(fun, iter)首先对可迭代对象 iter 中的前两个元素应用函数 fun,然后将其结果作为 fun 的第一个输入值,再对第 3 个元素应用 fun 函数;以此类推,最后返回一个数。使用 reduce 函数需要从工具包 functools 中提前导入。

from functools import reduce # 从工具包 functools 中导入 reducea = [1, 2, 3, 4]
b = reduce(lambda x1, x2: x1 + x2, a) # 求和
b
10

reduce也可以跟 3 个参数,即reduce(fun, iter, start=None)。此时,首先对一个初始值 start 与可迭代对象 iter 中的第一个元素应用函数 fun,然后将其结果作为 fun 的第一个输入值,再对第 2 个元素应用 fun 函数;以此类推,最后返回一个数。

a = [1, 2, 3, 4]
b = reduce(lambda x1, x2: x1 + x2, a, 10) # 求和,起始值为 10
b
20

try-except 语句调试

在编写程序时,有时候不知道程序能否正确运行,想试试程序运行结果如何,可以使用 try-except语句;若 try 块中的语句无法执行通过,则执行 except 块中的语句。

这个语句在程序调试时经常使用,下面的代码定义了一个除法函数:

def devide(x1, x2):try:z = x1/x2print(z)except:print('x2 should not be zero')devide(5, 0)
x2 should not be zero

上面的代码中,若 x1 能除以 x2,则输出除法结果,否则提示 x2 不能为零。

Python 还有一个关键字pass,不执行任何命令。一般用做占位语句,在程序调试时可以使用。

def devide(x1, x2):try:z = x1/x2print(z)except:passdevide(5, 0)
上面的代码中,若 x1 能除以 x2,则输出除法结果,否则程序不输出任何结果。

一些常用的内置函数

Python 内置了一些常用的函数,可以方便使用。本书简单介绍以下几个内置函数:

sum对可迭代对象(如列表,元组,集合)求和
max返回输入参数中的最大值
min返回输入参数中的最小值
abs返回输入数值的绝对值
round返回输入数值的四舍五入值
range创建一个整数序列类型,多用于 for 循环
enumerate将一个可迭代的对象,同时列出各个数据和对应索引,常用在 for 循环中
sorted对可迭代对象进行排序,默认升序
round(3.1415926, 2)  # 四舍五入时保留两位小数
3.14
round(3.1415926) # 默认四舍五入为整数
3

range 被 Python 直接视为一种数据类型,表示一个整数数列。包含终点(必有),起点(可选),步长(可选)。可以用list()将 range 类型转化为列表类型。

range(10)  # 创建一个从 0 到 10 (不包括 10) 的整数序列,默认起点为 0,默认步长值为 1
range(0, 10)
list(range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
range(2, 10)  # 创建一个从 2 到 10 的整数序列
range(2, 10, 2) # 创建一个从 2 到 10 的整数序列,并且步长值为 2
range(2, 10, 2)
list(range(2, 10, 2))
[2, 4, 6, 8]

eumerate 经常结合 for 循环使用。

a = [20, 30, 40, 50]
for i in range(len(a)):print(a[i], i)
20 0
30 1
40 2
50 3

使用 enumerate 则上述代码更简洁些:

a = [20, 30, 40, 50]
for item, i in enumerate(a):print(item, i)
0 20
1 30
2 40
3 50

sorted 函数可以对可迭代对象进行排序,默认为升序,可迭代对象一般是列表。

arr = [23, 54, 12, 37]
sorted(arr)  # 对列表升序排列
[12, 23, 37, 54]
sorted(arr, reverse = True)  # 对列表降序排列
[54, 37, 23, 12]

相关文章:

Python 编写函数

文章目录 条件语句循环语句自定义函数函数参数的传递类型函数的参数传入方法 lambda, map, filter, reduce 函数try-except 语句调试一些常用的内置函数 条件语句 编写程序时&#xff0c;经常用到一些条件或判断&#xff0c;需要用到 if 语句&#xff0c;它的字面意思是&#…...

C# Solidworks二次开发:创建距离配合以及移动组件API详解

今天要讲的文章是关于如何创建距离配合和移动组件的API详解。 &#xff08;1&#xff09;创建配合API&#xff0c;CreateMate() 这个API的解释是根据指定的特性数据对象来创建配合&#xff0c;也就可以理解为输入什么样的特征对象就可以创建出什么配合&#xff0c;这个API的输…...

Excel:通过Lookup函数提取指定文本关键词

函数公式&#xff1a;LOOKUP(9^9,FIND($G 2 : 2: 2:G 6 , C 2 ) , 6,C2), 6,C2),G 2 : 2: 2:G$6) 公式解释&#xff1a; lookup第一参数为9^9&#xff1a;代表的是一个极大值的数据&#xff0c;查询位置里面最接近这一个值的数据&#xff1b;lookup第二参数用find函数代替&am…...

sql:SQL优化知识点记录(六)

&#xff08;1&#xff09;索引优化1 查看一下有没有建立索引&#xff1a; 用到索引中的一个&#xff1a;type中的ref决定访问性能 用到索引中的两个&#xff1a;通过key_len的长度可以看出来&#xff0c;比第一个大一点。或者通过ref&#xff1a;中用到了两个常量const 用到了…...

C#搭建WebSocket服务实现通讯

在学习使用websocket之前我们先了解一下websocket&#xff1a; WebSocket是一种在单个TCP连接上进行全双工通信的通信协议。与HTTP协议不同&#xff0c;它允许服务器主动向客户端发送数据&#xff0c;而不需要客户端明确地请求。这使得WebSocket非常适合需要实时或持续通信的应…...

eclipse/STS(Spring Tool Suite)安装CDT环境(C/C++)

在线安装 help -> eclipse marketplace 可以发现&#xff0c;我所使用eclipse给我推荐安装的CDT是10.5版本 离线安装 下载离线安装包 下载地址&#xff1a;https://github.com/eclipse-cdt/cdt/blob/main/Downloads.md 可以看到利息安装包主要有如下四大类&#xff0c;…...

Python爬虫抓取经过JS加密的API数据的实现步骤

随着互联网的快速发展&#xff0c;越来越多的网站和应用程序提供了API接口&#xff0c;方便开发者获取数据。然而&#xff0c;为了保护数据的安全性和防止漏洞&#xff0c;一些API接口采用了JS加密技术这种加密技术使得数据在传输过程中更加安全&#xff0c;但也给爬虫开发带来…...

Nacos基础(2)——nacos的服务器和命名空间 springBoot整合nacos 多个nacos配置的情况

目录 引出nacos服务器和命名空间Nacos服务器命名空间 springBoot整合nacosspringcloud Alibaba 版本与springcloud对应关系引包配置maincontroller 报错以及解决【报错】错误&#xff1a;缺少服务名称报错&#xff1a;9848端口未开放 启动测试引入多个nacos配置多个配置的情况没…...

Win7设备和打印机里空白,0个对象,但是可以打印的处理办法

呉師傅 你是不是遇到过Win7系统打开设备和打印机的时候显示是空白的&#xff0c;0个设备的情况&#xff1f;要怎么操作才能解决这一问题呢&#xff0c;下面就分享一下如何处理这个问题的小方法大家可以尝试一下。 问题如下&#xff1a; 解决方法&#xff1a; 1、点击桌面左下…...

Python基础学习第六天:Python 数据类型

内置数据类型 在编程中&#xff0c;数据类型是一个重要的概念。 变量可以存储不同类型的数据&#xff0c;并且不同类型可以执行不同的操作。 在这些类别中&#xff0c;Python 默认拥有以下内置数据类型&#xff1a; 获取数据类型 您可以使用 type() 函数获取任何对象的数据…...

C++信息学奥赛1184:明明的随机数

#include <bits/stdc.h> using namespace std; int main() {int n; // 数组长度cin >> n; // 输入数组长度int arr[n]; // 定义整数数组&#xff0c;用于存储输入的整数// 输入数组元素for (int i 0; i < n; i){cin >> arr[i];}int e 0; // 计数器&…...

NoSQL技术——Redis

简单介绍 Redis是当下最流行的NoSQL数据库。在Redis中&#xff0c;数据的存储格式是以键值对的方式进行存储的。在键值对的存储形式中&#xff0c;值除了是常见的字符串&#xff0c;也可以是类似于Json对象的形式&#xff0c;或者是List&#xff0c;Map等数组格式&#xff0c;…...

【探索SpringCloud】服务发现-Nacos服务端数据结构和模型

前言 上一文中&#xff0c;我们从官方的图示了解到Nacos的服务数据结构。但我关心的是&#xff0c;Nacos2.x不是重构了吗&#xff1f;怎么还是这种数据结构&#xff1f;我推测&#xff0c;必然是为了对Nacos1.x的兼容&#xff0c;实际存储应该不是这样的。于是&#xff0c;沿着…...

基于简单的信息变换实现自然语言模型

题目:基于简单的信息变换实现自然语言模型 摘要:在自然语言处理中,自然语言模型是至关重要的。本论文提出了一种基于简单的信息变换实现自然语言模型的方法。该方法将输入信息进行一系列的信息变换,如分割、属性、等效替换、增加删除等变换,与原始信息进行比较,得知信息是…...

低配版消息队列,redis——Stream

消息队列实现&#xff1a;群发效果 redis原有的消息队列数据不会持久化&#xff0c;所以它加了一个Stream数据结构。 添加数据&#xff1a;XADD s1(组名) *(*为自动生成) key val 取出数据&#xff1a; XREAD COUNT 1(取出个数) BLOCK 1(队列为空时等待时间0为一直等) STREA…...

【OpenCV入门】第五部分——图像运算

文章结构 掩模图像的加法运算图像的位运算按位与运算按位或运算按位取反运算按位异或运算图像位运算的运用 合并图像加权和覆盖 掩模 当计算机处理图像时&#xff0c;有些内容需要处理&#xff0c;有些内容不需要处理。能够覆盖原始图像&#xff0c;仅暴露原始图像“感兴趣区域…...

【Seata】00 - Seata Server 部署(Windows、Docker 基于 Jpom)

文章目录 前言参考目录版本说明Windows 部署 seata-server1&#xff1a;下载压缩包2&#xff1a;文件存储模式3&#xff1a;db 存储模式3.1&#xff1a;建表3.2&#xff1a;修改配置文件3.3&#xff1a;启动脚本4&#xff1a;源码部署 Docker 部署 seata-server &#xff08;基…...

菜鸟教程第一天

1、Java变量类型 1.1 成员变量可以声明在使用前或者使用后。这句话怎么理解&#xff1f; 大家都知道&#xff0c;如果你在代码中使用这个变量&#xff0c;但是在此之前没有声明这个变量&#xff0c;是会报错的。如果是局部变量&#xff0c;在使用前&#xff0c;必须得声明并初…...

数据结构--5.2马踏棋盘算法(骑士周游问题)

题目渊源&#xff1a; 马踏棋盘问题&#xff08;又称骑士周游问题或骑士漫游问题&#xff09;是算法设计的经典问题之一。 题目要求&#xff1a; 国际象棋的棋盘为8*8的方格棋盘&#xff0c;现将“马”放在任意指定的方格中&#xff0c;按照“马”走棋的规则将“马”进行移动。…...

如何使用CSS实现一个响应式图片幻灯片(Responsive Image Slider)效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 响应式图片幻灯片⭐ HTML结构⭐ CSS样式⭐ JavaScript交互⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅&#xff01;这个…...

UDP(Echoserver)

网络命令 Ping 命令 检测网络是否连通 使用方法: ping -c 次数 网址ping -c 3 www.baidu.comnetstat 命令 netstat 是一个用来查看网络状态的重要工具. 语法&#xff1a;netstat [选项] 功能&#xff1a;查看网络状态 常用选项&#xff1a; n 拒绝显示别名&#…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

macOS多出来了:Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用

文章目录 问题现象问题原因解决办法 问题现象 macOS启动台&#xff08;Launchpad&#xff09;多出来了&#xff1a;Google云端硬盘、YouTube、表格、幻灯片、Gmail、Google文档等应用。 问题原因 很明显&#xff0c;都是Google家的办公全家桶。这些应用并不是通过独立安装的…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包

文章目录 现象&#xff1a;mysql已经安装&#xff0c;但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时&#xff0c;可能是因为以下几个原因&#xff1a;1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...

有限自动机到正规文法转换器v1.0

1 项目简介 这是一个功能强大的有限自动机&#xff08;Finite Automaton, FA&#xff09;到正规文法&#xff08;Regular Grammar&#xff09;转换器&#xff0c;它配备了一个直观且完整的图形用户界面&#xff0c;使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

STM32标准库-ADC数模转换器

文章目录 一、ADC1.1简介1. 2逐次逼近型ADC1.3ADC框图1.4ADC基本结构1.4.1 信号 “上车点”&#xff1a;输入模块&#xff08;GPIO、温度、V_REFINT&#xff09;1.4.2 信号 “调度站”&#xff1a;多路开关1.4.3 信号 “加工厂”&#xff1a;ADC 转换器&#xff08;规则组 注入…...