测试萌新三天速通python基础(二)列表,字符串,元组,字典,遍历,容器,集合,函数

python基础

    • 字符串
    • 下标(索引)
    • 切片
    • 字符串的替换 replace()
    • 字符串拆分 split()
    • 字符串的连接 join
    • 列表 list
    • 列表的增删改查
    • 列表的反转 reverse()
    • 排序
    • 列表嵌套
    • 元组 tuple
  • 排序 升序
  • 降序
    • 交换变量
    • 字典 dict
    • 查询
    • 遍历
    • 容器
    • 集合
    • 函数
    • 参数
    • 函数的嵌套调⽤
    • 函数的返回值
    • 模块导⼊的⽅法
    • ____name___ 变量
    • 可变类型与不可变类型
    • 局部变量和全局变量
    • 函数有多个返回值
    • 传参方式
    • 多值参数(可变参数/不定长参数)
    • 匿名函数
    • 案例

字符串

数据序列 , 容器 字符串 str, 列表 list,元组 tuple, 字典 dict
了解 集合 set
使用引号(单引号, 双引号, 三引号)引起来的内容,就是字符串

数据序列 , 容器 字符串 str, 列表 list,元组 tuple, 字典 dict
了解 集合 set
使用引号(单引号, 双引号, 三引号)引起来的内容,就是字符串

1. 使用单引号
str1 = 'hello'
2. 使用双引号定义
str2 = "hello"
3. 使用 三引号 定义
str3 = """hello"""
str4 = '''hello'''
print(type(str1), type(str2), type(str3), type(str4))
  1. 定义字符串 I’m 小明, 字符串本身包含引号

4.1 如果字符串本身包含单引号,定义的时候不能使用 单引号,

4.2 如果字符串本身包含双引号,定义的时候不能使用 双引号,

str5 = “I’m 小明”
print(str5) # I’m 小明

  1. 转义字符 \n \t ’ "
str6 = 'I\'m 小明'
print(str6) # I'm 小明
6. I\'m 小明 \\ --> \
str7 = 'I\\\'m 小明'
print(str7) # I\'m 小明7. 原生字符串 在字符串的前边 加上 r"", 字符串中的 \ 就不会进行转义str8 = r'I\'m 小明'
print(str8) # I\'m 小明str7 = r'I\\\'m 小明'
print(str7) # I\\\'m 小明

下标(索引)

1, 下标(索引), 是数据在容器(字符串, 列表, 元组)中的位置, 编号
2, 一般来说,使用的是正数下标, 从 0 开始
3, 作用: 可以通过下标来获取具体位置的数据. 使用的语法为容器[下标]
4, Python 中是支持负数下标, -1 表示最后一个位置的数据

在这里插入图片描述

str1 = ‘abcdefg’

需求: 打印输出字符串中的 a 字符

print(str1[0])
print(str1[-7])

需求: 打印输出字符串中 最后一个字符(-1)

print(str1[-1])

需求: 打印输出 下标为 3 的位置的字符

print(str1[3])

切片

1, 使用切片操作, 可以一次性获取容器中的多个数据(多个数据之间存在一定的规律,数据的下标是 等差数列(相邻的两个数字之间的差值是一样的))
2, 语法 容器[start🔚step]
2.1 start 表示开始位置的下标
2.2 end 表示结束位置的下标,但是 end 所对应的下标位置的数据是不能取到的
2.3 step 步长,表示的意思就是相邻两个坐标的差值
start, start+step, start+step*2, …,end(取不到)

my_str = 'abcdefg'
# 需求1 : 打印字符串中 abc 字符 start 0, end 3, step 1
print(my_str[0:3:1])  # abc
# 1.1 如果步长是 1, 可以省略不写
print(my_str[0:3])  # abc
# 1.2 如果 start 开始位置的下标为 0, 可以不写,但是冒号不能少
print(my_str[:3])  # abc
# 需求 2: 打印字符串中的 efg , start 4, end 7, step 1
print(my_str[4: 7])  # efg
# 2.1 如果取到最后一个字符, end  可以不写,但是冒号不能少
print(my_str[4:])  # efg
# 需求 3: 打印字符串中的 aceg , start 0, end 7(最后), 步长 2
print(my_str[::2])  # aceg

字符串查找方法 find()

字符串.find(sub_str) # 在字符串中 查找是否存在 sub_str 这样的字符串
返回值(这行代码执行的结果):
1, 如果存在sub_str, 返回 第一次出现 sub_str 位置的下标
2, 如果不存在sub_str, 返回 -1

# 1. 现有字符串数据: '黑马程序员'
# 2. 请设计程序, 实现判断"黑马"和"白马"是否存在于数据中
# 3. 要求如果数据存在, 则输出数据所在位置
my_str = '黑马程序员'
# sub_str = '黑马'
sub_str = '白马'
result = my_str.find(sub_str)
if result == -1:print(f'{sub_str}不存在')
else:print(f'{sub_str}存在, 下标位置为:', result)

字符串的替换 replace()

字符串.replace(old, new, count) # 将字符串中的 old 字符串 替换为 new 字符串

  • old 原字符串,被替换的字符串
  • new 新字符串,要替换为的字符串
  • count 一般不写,表示全部替换, 可以指定替换的次数
  • 返回: 会返回一个替换后的完整的字符串
  • 注意: 原字符串不会改变的
my_str = 'good good study'
# 需求, 将 good 变为 GOOD
my_str1 = my_str.replace('good', 'GOOD')
print('my_str :', my_str)
print('my_str1:', my_str1)
# 将第一个 good 替换为 Good
my_str2 = my_str.replace('good', 'Good', 1)
print('my_str2:', my_str2)
# 将第二个 good  替换为 Good
# 先整体替换为 Good, 再将替换后的 第一个Good 替换为 good
my_str3 = my_str.replace('good', 'Good').replace('Good', 'good', 1)
print('my_str3:', my_str3)

字符串拆分 split()

字符串.split(sep) # 将字符串按照指定的字符串 sep 进行分隔

  • sep , 按照 sep 分隔, 可以不写, 默认按照空白字符(空格 \t \n)分隔
  • 返回: 列表,列表中的每个数据就是分隔后的字符串
str1 = 'hello Python\tand itcast and\nitheima'
# 1. 默认 按照空白字符分隔
list1 = str1.split()
print(list1)  # ['hello', 'Python', 'and', 'itcast', 'and', 'itheima']
# 2. 按照 空格分隔
list2 = str1.split(' ')
print(list2)  # ['hello', 'Python\tand', 'itcast', 'and\nitheima']
# 3. 按照 and  分隔
list3 = str1.split('and')
print(list3)  # ['hello Python\t', ' itcast ', '\nitheima']

字符串的连接 join

字符串.join(容器) # 容器一般是列表 , 将字符串插入到列表相邻的两个数据之间,组成新的字符串
注意点: 列表中的数据 必须都是字符串才可以

list1 = ['hello', 'Python', 'and', 'itcast', 'and', 'itheima']
# 将 列表中数据使用 空格 组成新的字符串
str1 = ' '.join(list1)
print(str1)  # hello Python and itcast and itheima
# 使用 逗号 连接
str2 = ','.join(list1)
print(str2)  # hello,Python,and,itcast,and,itheima
# 使用 _*_ 连接
str3 = '_*_'.join(list1)
print(str3)  # hello_*_Python_*_and_*_itcast_*_and_*_itheima

列表 list

1, 列表,list, 使用 []
2, 列表可以存放任意多个数据
3, 列表中可以存放任意类型的数据
4, 列表中数据之间 使用 逗号隔开

# 方式1, 使用类实例化的方式
# 1.1 定义空列表  变量 = list()
list1 = list()
print(type(list1), list1)  # <class 'list'> []
# 1.2 定义非空列表 , 也称为 类型转换  list(可迭代类型)  可迭代类型,能够使用 for 循环 就是 可迭代类型(比如 容器)
# 将容器中的 每个数据 都作为列表中一个数据进行保存
list2 = list('abcd')
print(list2)  # ['a', 'b', 'c', 'd']
# 方式2, 直接使用 [] 进行定义(使用较多)
# 2.1 定义空列表
list3 = []
print(list3)
# 2.2 定义非空列表
list4 = [1, 3.14, 'hello', False]
print(list4)
# 获取 列表中 第一个数据
print(list4[0])  # 1
# 获取列表中最后一个数据
print(list4[-1])  # False
# 获取中间两个数据即 3.14 和 'hello' (1 和 2)
print(list4[1: 3])  # [3.14, 'hello']

列表的增删改查

list1 = ['hello', 2, 3, 2, 3, 4]
# 查找 2 出现的下标
num = list1.index(2)
print(num)
# 统计数据 2 出现的次数
num1 = list1.count(2)
print(num1)
# 统计数据 20 出现的次数
num2 = list1.count(20)
print(num2)  # 0

增和删

# 定义空列表
list1 = []
print(list1)
# 添加数据 张三
list1.append('张三')
print(list1)
# 添加李四
list1.append('李四')
print(list1)
list1.append('王五')
list1.append('赵六')
print(list1)
# 删除最后一个数据
list1.pop()
print(list1)
# 删除第二个数据
name = list1.pop(1)
print('删除的对象为:', name)
print(list1)

修改数据

列表的排序

想要修改列表中的数据, 直接是所有下标即可 列表[下标] = 新数据

my_list = [1, 2]
my_list[0] = 10
print(my_list)
my_list[-1] = 200
print(my_list)

列表的反转 reverse()

字符串 反转 字符串[::-1]

列表 反转

  1. 列表[::-1] 得到一个新的列表, 原列表不会改动
  2. 列表.reverse() 直接修改原列表的数据
my_list = ['a', 'b', 'c', 'd', 'e']
# 1. 切片
my_list1 = my_list[::-1]
print('my_list :', my_list)
print('my_list1:', my_list1)
# 2. reverse
my_list.reverse()
print('my_list :', my_list)

排序

列表.sort() # 升序, 从小到大, 直接在原列表中进行排序
列表.sort(reverse=True) # 降序, 从大到下, 直接在原列表中进行排序

my_list = [1, 4, 7, 2, 5, 8, 3, 6, 9]
# 排序 升序
my_list.sort()
print(my_list)
# 降序
my_list.sort(reverse=True)
print(my_list)

列表嵌套

student_list = [["张三", "18", "功能测试"], ["李四", "20", "自动化测试"], ["王五", "21", "自动化测试"]]
# 张三
print(student_list[0][0])
# 李四
print(student_list[1][0])
# 张三 的信息添加一个 性别 男 ---> 向张三所在的列表 添加数据
student_list[0].append('男')
print(student_list)
# 删除 性别
student_list[0].pop()
print(student_list)
# 打印 所有人员的年龄
for info in student_list:  # info 是 列表print(info[1])

元组 tuple

my_list = [1, 4, 7, 2, 5, 8, 3, 6, 9]

排序 升序

my_list.sort()
print(my_list)

降序

my_list.sort(reverse=True)
print(my_list)
列表的嵌套 就是指 列表中数据都是列表.
student_list = [[“张三”, “18”, “功能测试”], [“李四”, “20”, “自动化测试”], [“王五”, “21”, “自动化测
试”]]

# 张三
print(student_list[0][0])
# 李四
print(student_list[1][0])
# 张三 的信息添加一个 性别 男 ---> 向张三所在的列表 添加数据
student_list[0].append('男')
print(student_list)
# 删除 性别
student_list[0].pop()
print(student_list)
# 打印 所有人员的年龄
for info in student_list: # info 是 列表print(info[1])

1, 元组 tuple, 使用的 ()
2, 元组和列表非常相似, 都可以存储多个数据, 都可以存储任意类型的数据
3, 区别就是 元组中的数据不能修改,列表中可以修改
4, 因为元组中的数据不能修改,所以只能 查询方法, 如 index, count ,支持下标和切片
5, 元组, 主要用于传参和返回值

交换变量

1, 在定义元组的时候, 小括号可以省略不写
2, 组包(pack), 将多个数据值组成元组的过程 a = 1, 2 # a = (1, 2)
3, 拆包(解包 unpack), 将容器中多个数据 分别给到多个变量, 需要保证容器中元素的个数和变量 的个数保持一致

a, b = b, a
print(a, b)
x, y, z = 'abc'
print(y) # b

字典 dict

1, 字典 dict, 使用 {} 表示
2, 字典是由键(key)值(value)对组成的, key: value
3, 一个键值对是一组数据, 多个键值对之间使用 逗号隔开
4, 在一个字典中, 字典的键 是不能重复的
5, 字典中的键 主要使用 字符串类型, 可以是数字
6, 字典中没有下标

# 1, 类实例化的方式
my_dict1 = dict()
print(type(my_dict1), my_dict1)  # <class 'dict'> {}
# 2, 直接使用 {}  定义
# 2.1 定义空字典
my_dict2 = {}
print(my_dict2)
# 2.2 定义非空字典, 姓名, 年龄, 身高, 性别
my_dict = {"name": "小明", "age": 18, "height": 1.78, "isMen": True}
print(my_dict)
# 将年龄改为 20
my_dict['age'] = 20
print(my_dict)
# 添加 体重 weight
my_dict['weight'] = 65
print(my_dict)
my_dict.pop('weight')
print(my_dict)
my_dict.pop('height')
print(my_dict)

增加和修改

字典[‘键’] = 值

1, 键 存在, 修改

2, 键 不存在, 添加

删除 字典的删除是根据字典的键 删除键值对 字典.pop(‘键’)

查询

方法一: 字典[‘键’] # 键 不存在,会报错

方法 二 字典.get(键) # 键不存在,返回 None

my_dict = {'name': '小明', 'age': 20}
# 获取 name 值
print(my_dict['name'])
print(my_dict.get('name'))
# 获取 性别 sex
# print(my_dict['sex'])   # 会报错, 因为 键不存在
print(my_dict.get('sex'))

遍历

1.遍历字典的键

for 变量 in 字典:
print(变量)

for 变量 in 字典.keys(): # 字典.keys() 可以获取字典所有的键
print(变量)

2.遍历字典的值

for 变量 in 字典.values(): # 字典.values() 可以获取字典中是所有的值
print(变量)

3.遍历字典的键和值

变量1 就是 键, 变量2 就是值

for 变量1, 变量2 in 字典.items(): # 字典.items() 获取的是字典的键值对
print(变量1, 变量2)

my_dict = {'name': '小明', 'age': 18, 'sex': '男'}
for k in my_dict:print(k)
print('*' * 30)
for k in my_dict.keys():print(k)
print('-' * 30)
for v in my_dict.values():print(v)
print('_*_' * 30)
for k, v in my_dict.items():print(k, v)

容器

in 操作符
in 是 Python 中的关键字.
数据 in 容器 可以⽤来判断 容器中是否包含这个数据, 如果包含返回 True,如果不包含返回 False
对于字典来说,判断的是 字典中是否包含这个键

集合

集合 set, {数据, 数据, …}

1, 集合中的数据是不能重复的, 即没有重复数据
2, 应⽤, 对列表进⾏去重操作 就是类型转换 , 可以将 列表转换为 集合, 然后再将集合转换为列表

# 遍历原列表
# for i in my_list:
# # 判断数据是否存在新列表
# if i in new_list:
# # 存在 什么都不操作
# pass
# else:
# # 不存在, 添加到新列表

函数

函数: 将多⾏代码(可以实现⼀个特定的功能)放在⼀块,并给它起⼀个名字. 在需要使⽤多⾏代码的时候, 可以使⽤名字代替.
定义函数的好处: 减少代码冗余(重复的代码不需要多次书写),提⾼编程效率

定义,就是给多⾏代码起名字的过程函数的定义需要使⽤ 关键字 def, 单词 define

定义函数的⼩技巧

1, 先不使⽤函数,将多⾏代码写完
2, 在多⾏代码的上⽅使⽤ def 起名字
3, 使⽤ tab 键, 将多⾏代码进⾏缩进

def login():print('1. 输入用户名')print('2. 输入密码')print('3. 输入验证码')print('4. 点击登录')
login()

参数

参数: 在函数定义的时候,在括号中写⼊变量,这个变量就称为是函数的参数. 形式参数(形参)
在函数调⽤的时候,可以给定义时候的形参传递具体的数据值,供其使⽤. 实际参数(实参)

def sun_2_num(a, b):  # a, b  形参c = a + bprint(c)
sun_2_num(10, 20)   # 10, 20 实参 10 给 a,  20 给 b

函数的嵌套调⽤

def test01():print(1)print('func01')print(2)
# 2. 定义名为test02的函数,打印当前函数的名称,并 调用test01函数
def test02():print('func2')test01()print(4)

函数的返回值

1.在⼀个函数中,想要返回⼀个数据(想要有返回值), 需要使⽤ return 关键字

2.为什么返回值? 在函数中可能通过各种代码,得到的数据结果,想要在函数外部使⽤,就需要使⽤返回值
3, 如果函数有返回值, ⼀般在调⽤的时候 会使⽤变量来接收(保存) 返回值, 以便后续使⽤

4.return 关键字的作⽤, 将⼀个数据值返回到调⽤的地⽅

5.函数遇到 return 会结束函数的执⾏ return 关键字只能⽤在函数中
6, 如果⼀个函数 没有写 return,可以认为 返回值

def get_max(a, b):if a > b:return aelse:return bprint('我会执行吗, 不会执行')

模块导⼊的⽅法

1.import 模块名 # 模块名 就是代码⽂件名 ,不要 .py

2.from 模块名 import 功能名 # 导⼊指定的功 # 可以使⽤快捷键 Alt 回⻋

_name 变量

1, 导⼊模块的时候, 会执⾏模块中的代码
2, 作⽤: 如果在导⼊模块的时候, 模块中的部分代码不想被执⾏, 可以使⽤ name 来解决
3, name 变量,是 Python 解释器内置的变量(变量的值是⾃动维护的), 每个代码⽂件中,都有这个变量
3.1 在模块中 直接右键运⾏代码⽂件, name 变量的值是 ‘main
3.2 如果是被导⼊运⾏代码⽂件, name 变量的值 是 模块名(⽂件名)

class HouseItem:"""家具类"""def __init__(self, name, area):self.name = name   # 名字self.area = area   # 占地面积def __str__(self):return f"{self.name} 占地面积 {self.area} 平米"
class House:"""房子类"""def __init__(self, h_type, area):self.h_type = h_type    # 户型self.total_area = area  # 总面积self.free_area = area   # 剩余面积和总面积一样self.item_list = []     # 刚开始没有家具def __str__(self):return f"户型:{self.h_type}、总面积:{self.total_area} 平米、剩余面积:{self.free_area}平米、家具名称列表:{self.item_list}"def add_item(self, item):  # 1. 房子对象(self)   2. 家具对象(传参)"""添加家具, item 家具对象"""# 1. 先判断房子的剩余面积和家具的占地面积的关系if self.free_area > item.area:  # 对象.属性  获取属性值print(f'添加家具: {item.name}')self.item_list.append(item.name)# 修改剩余面积self.free_area -= item.areaelse:print(f"房子剩余面积不足,换个大房子吧.....")
if __name__ == '__main__':# 创建家具对象bed = HouseItem('席梦思', 4)chest = HouseItem('衣柜', 2)table = HouseItem('餐桌', 1.5)print(bed)print(chest)print(table)# 创建房子house = House('三室一厅', 100)print(house)house.add_item(bed)print(house)house.add_item(chest)print(house)house.add_item(table)print(house)

可变类型与不可变类型

根据内存中的数据是否允许修改,将数据类型分为可变类型与不可变类型
简单理解: 不使用等号,能不能修改数据值
可变类型: 可以修改

  • 列表(list) list.append()
  • 字典(dict ) dict.pop()
  • 集合(set)
    不可变类型: 不允许修改
  • 数字类型(int , float , bool)
  • 字符串(str)
  • 元组(tuple)
my_tuple = (1, 2, [10, 20])  # 元组中 存储的 1 的地址, 2 的地址, 列表的地址
print(my_tuple, id(my_tuple), id(my_tuple[-1]), id(my_tuple[-1][-1]))
my_tuple[-1][-1] = 30  # 修改的列表中最后一个位置的引用
print(my_tuple, id(my_tuple), id(my_tuple[-1]), id(my_tuple[-1][-1]))

局部变量和全局变量

def func1():    num = 10  # 局部变量    print(num)

函数有多个返回值

def calc(a, b):"""返回两个数的和及差"""return a + b, a - b
result = calc(10, 20)
print(result)

传参方式

def show_info(name, age):print(f"name:{name}, age: {age}")
# 位置传参
show_info('小明', 18)
# 关键字传参
show_info(age=18, name='张三')
# 混合使用
show_info('李四', age=17)
函数定义的时候, 给形参一个默认的数据值,这个参数就是缺省参数(默认参数)
def show_info(name, age=18, sex='保密'):print(name, age, sex)
# 调用
show_info('张三', 18, '男')

多值参数(可变参数/不定长参数)

1.在函数定义的时候,不确定在调用的时候,实参有多少个,此时可以使用 多值参数
2, 在普通的参数前边加上一个 *, 这个参数就变为 多值参数
3, 这个参数可以接收任意多个位置传参的数据, 类型 元组
4, 这个形参一般写作 args(arguments), 即 *args

在这里插入图片描述

匿名函数

匿名函数: 使用 lambda 关键字 定义的表达式,称为匿名函数

lambda 参数, 参数: 一行代码 # 只能实现简单的功能,只能写一行代码

匿名函数 一般不直接调用, 作为函数的参数使用的

user_list = [{'name': '张三', 'age': 22, 'title': '测试工程师'},{'name': '李四', 'age': 24, 'title': '开发工程师'},{'name': '王五', 'age': 21, 'title': '测试工程师'}]
# user_list.sort()   # 只能对数字,字符串排序
# 根据字典的 age 键 排序
# 想要对列表中的字典排序,需要 key 形参来指定根据字典中的什么键排序
# key 这个参数需要传递一个函数,使用匿名函数
# 列表.sort(key=lambda x: x['键'])
def func(x):return x['age']
user_list.sort(key=lambda x: x['age'])
# user_list.sort(key=func)
print(user_list)

案例

在这里插入图片描述

# 定义一个列表, 保存所有学生信息
# stu_list = []
stu_list = [{'name': 'aa', 'age': '11'}, {'name': 'bb', 'age': '22'}, {'name': 'cc', 'age': '33'}]
def make_student():"""录入单个学生信息"""name = input('请输入姓名:')age = input('请输入年龄:')# 将学生信息存入字典stu_dict = {"name": name, "age": age}# 返回单个学生信息return stu_dict
def show_stu_info():"""展示学生信息"""print('---------学生列表信息-----------')j = 1  # 初始序号for stu_dict in stu_list:  # stu_dict 字典print(f"{j}\t\t{stu_dict.get('name')}\t\t{stu_dict.get('age')}")j += 1  # 修改序号print('-------------------------------')
def get_student_counts():"""获取学生的数量"""return len(stu_list)
def search_student():"""查询学生的信息"""name = input('请输入要查询的学生姓名:')for stu_dict in stu_list:if name == stu_dict.get('name'):# 找到了这个学生print(f'姓名:{name}, 年龄: {stu_dict.get("age")}')# 终止return  # 结束函数的执行# 写在循环的外边print(f'对不起, 名字叫 [{name}]的学生不存在')
if __name__ == '__main__':# 录入三个学生信息# for i in range(3):#     stu = make_student()#     # 需要将单个学生添加到列表#     stu_list.append(stu)## print(stu_list)# 展示学生信息show_stu_info()# 获取学生数量print('学生总数为: ', get_student_counts())search_student()
    print('-------------------------------')
def get_student_counts():"""获取学生的数量"""return len(stu_list)
def search_student():"""查询学生的信息"""name = input('请输入要查询的学生姓名:')for stu_dict in stu_list:if name == stu_dict.get('name'):# 找到了这个学生print(f'姓名:{name}, 年龄: {stu_dict.get("age")}')# 终止return  # 结束函数的执行# 写在循环的外边print(f'对不起, 名字叫 [{name}]的学生不存在')
if __name__ == '__main__':# 录入三个学生信息# for i in range(3):#     stu = make_student()#     # 需要将单个学生添加到列表#     stu_list.append(stu)## print(stu_list)# 展示学生信息show_stu_info()# 获取学生数量print('学生总数为: ', get_student_counts())search_student()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10940.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【FFmpeg】Filter 过滤器 ② ( 裁剪过滤器 Crop Filter | 裁剪过滤器语法 | 裁剪过滤器内置变量 | 裁剪过滤器常用用法 )

文章目录 一、裁剪过滤器1、裁剪过滤器简介2、裁剪过滤器语法3、裁剪过滤器内置变量4、裁剪过滤器示例5、裁剪过滤器应用6、裁剪过滤器图示 二、裁剪过滤器常用用法1、裁剪指定像素的视频区域2、裁剪视频区域中心正方形 - 默认裁剪3、裁剪视频区域中心正方形 - 手动计算4、裁剪…

【Linux】轻量级应用服务器如何开放端口 -- 详解

一、测试端口是否开放 1、测试程序 TCP demo 程序&#xff08;可参考&#xff1a;【Linux 网络】网络编程套接字 -- 详解-CSDN博客&#xff09; 2、测试工具 Windows - cmd 窗口 输入命令&#xff1a;telnet [云服务器的公网ip] [port] 二、腾讯云安全组开放端口 1、安全组设…

【C++】——string类

前言 在C语言里面我们用的字符串都是以\0结尾的字符合集&#xff0c;为了操作方便所以在c中推出了stirng类 一 string介绍 1.string是表示字符串的字符串类 2.因为是类&#xff0c;所以他会有一些常用的接口&#xff0c;同时也添加了专门用来操作string的常规操作 3.string…

揭秘高效引流获客的艺术:转化技巧大公开

在数字化营销的海洋中&#xff0c;每个企业都如同一艘努力航行的船&#xff0c;而流量便是推动船只前行的风帆。如何有效吸引并获取潜在客户&#xff0c;即所谓的“引流获客”&#xff0c;已成为企业市场营销策略中不可或缺的一环。本文将详细探讨几种实用且高效的引流获客技巧…

Ardupilot开源代码之Rover上路 - 后续1

Ardupilot开源代码之Rover上路 - 后续1 1. 源由2. 问题汇总2.1 问题1&#xff1a;飞控选择2.2 问题2&#xff1a;飞控安装位置和固定2.3 问题3&#xff1a;各种插头、插座配套2.4 问题4&#xff1a;分电板缺陷2.5 问题5&#xff1a;电机编码器接线及正反向问题2.6 问题6&#x…

【C++】stack和queue 适配器

&#x1f525;个人主页&#xff1a;北辰水墨 &#x1f525;专栏&#xff1a;C学习仓 本节内容我们来讲解栈和队列的模拟实现&#xff0c;文末会赋上模拟实现的代码 一、stack的使用和模拟实现 stack适配器的介绍&#xff1a; 1. stack是一种容器适配器&#xff0c;专门用在具…

基于openEuler22.03 LTS环境的容器项目实训——分布式微服务项目部署

一、说明 本文配置环境为VMware虚拟机&#xff08;4核CPU&#xff0c;4 GB内存&#xff0c;40GB磁盘&#xff09;&#xff0c;OS为openEuler 22.03 LTS &#xff0c;虚拟机要求能联网。 二、安装docker环境 2.1 安装docker相关软件包 [rootnode01 ~]# dnf -y install docker…

Windows环境下VSCode加MinGw-W64搭建C/C++开发环境

前言&#xff1a; 本文记录了自己在配置 Windows环境下 VSCode&#xff0c;并安装MinGW-W64来搭建windows操作系统下下的C/C开发环境。本文重点参考了如下链接中知乎上的文章里介绍的方法&#xff0c;在windows上安装 MinGW-W64。 vscode c/c环境配置&#xff08;MinGW&…

深度学习中的一些概念

训练术语 欠拟合 欠拟合是指模型没有很好地捕获到数据特性&#xff0c;不能完整地表示数据的全部信息&#xff0c;也就是模型的复杂度低于应有的水平。例如&#xff0c;假设一个数据集实际上服从二阶多项式分布&#xff0c;但我们使用一阶线性模型去拟合它&#xff0c;这样的…

开发时如何快速分析代码和生成测试方法(Baidu Comate插件帮我一键分析)

目录 前言 Baidu Comate智能编码助手简介 安装教程 使用RabbitMQ一个绑定队列方法进行演示 进行测试现有功能 使用感觉 测试结果 前言 因为在开发代码的时候&#xff0c;发现有很多都是废话也不是很想写注释 的&#xff0c;毕竟程序员最讨厌的两件事情&#xff0c;一…

AI 重塑产品设计

作者&#xff1a;明明如月学长&#xff0c; CSDN 博客专家&#xff0c;大厂高级 Java 工程师&#xff0c;《性能优化方法论》作者、《解锁大厂思维&#xff1a;剖析《阿里巴巴Java开发手册》》、《再学经典&#xff1a;《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

Chrome的常用操作总结

Chrome的常用操作总结 最近的自己真的好忙啊,好久真好久没有写博客了,今天我就趁着周末的这段时间总结一下最近自己的用的Chrome浏览器常用的命令 不得不说: 就是特么的丝滑!吊打一切浏览器(不接受反驳哈哈哈)因为反驳我也不听嘻嘻 用好快捷键,就是事半功倍!!!重要的事儿说一遍…

【定制化】在Android平台实现自定义的程序启动页

特别说明&#xff1a;以下仅适用于Android平台。 实现原理 创建安卓端自定义的Activity禁用UnityPlayerActivity的启动Logo改用自定义Activity 示例效果 参考简单步骤或详细步骤都可实现。 自定义的启动动画&#xff0c;效果如下&#xff1a; 简单步骤 三步操作实现启动动画…

Vue3项目Easy云盘(二):文件列表+新建目录+文件重命名+文件上传

一、文件列表 1.封装全局组件Table.vue 因为Main.vue等都会用到文件列表table&#xff0c;所以直接封装成组件。 src/components/Table.vue <template><!-- 表格 --><div><el-tableref"dataTable":data"dataSource.list || []":h…

用迭代加深解决加成序列问题

可以看到这个最坏的结果是100层搜索&#xff0c;但是其实1 2 4 8 16 32 64 128&#xff0c;到128的话也只要8&#xff0c;所以大概只需要10几层搜索就可以解决了&#xff0c;这个时候就可以用迭代加深的方法&#xff0c;深度一点点的加&#xff0c;如果大于概深度就舍去。有人说…

用户登录后端:登录密码解密后用PasswordEncoder验证密码是否正确

前置知识: 前端登录加密看用户登录 PasswordEncoder加密看PasswordEncoder详解 项目中因为要判断用户登录密码是否正确&#xff0c;通过输入错误次数锁住用户 1.后端配置rsa私钥 #密码加密传输&#xff0c;前端公钥加密&#xff0c;后端私钥解密 rsa:private_key: xxxx2. 读…

基于C++基础知识的指针

一、变量与指针 在C中&#xff0c;变量是用来存储数据的一个标识符&#xff0c;而指针是一个变量&#xff0c;该变量存储的是另一个变量的地址。 变量可以是不同的数据类型&#xff0c;包括整数&#xff08;int&#xff09;、浮点数&#xff08;float&#xff09;、字符&#…

智慧粮库/粮仓视频监管系统:AI视频智能监测保障储粮安全

智慧粮库视频监管系统是一种基于物联网、AI技术和视频监控技术的先进管理系统&#xff0c;主要用于对粮食储存环境进行实时监测、数据分析和预警。TSINGSEE青犀智慧粮库/粮仓视频智能管理系统方案通过部署多区域温、湿度、空气成分等多类传感器以及视频监控等设施&#xff0c;对…

IDEA及Maven配置代理及Maven中央仓库配置详解

一、配置代理 首先&#xff0c;需要本地开启代理入口&#xff0c;如图。 这个跟你使用代理软件有关。像我使用的是qv2ray。 其次&#xff0c;idea配置代理&#xff0c;如图。 1.1 idea配置代理 打开Settings&#xff0c;如图 1.2 maven配置代理 maven配置代理&#xff0c;修…

虚拟机CentOS密码重置

1&#xff0c;reboot重启 在出现下面的界面1按e 如果有选项就选择“CentOS Linux &#xff08;3.10.0-327.e17.x86_64&#xff09;7 &#xff08;Core&#xff09;”【我的电脑没有直接显示界面2】 界面1 界面2 2&#xff0c;在上述界面2中继续按e进入编辑模式 找到“ro cr…