Python基础_第4章_Python数据序列(容器)

news2024/11/16 5:29:00

Python基础_第4章_Python数据序列(容器)

文章目录

  • Python基础_第4章_Python数据序列(容器)
  • Python数据序列(容器)
  • 一、作业回顾
    • 1、面试题
    • 2、报数字(数7)
  • 二、了解字符串
    • 1、字符串的定义
    • 2、字符串输入
    • 3、字符串的输出
      • ☆ 普通输出
      • ☆ 格式化输出
    • 4、字符串在计算机底层的存储形式
    • 5、聊聊索引下标
  • 三、字符串切片
    • 1、什么是字符串切片
    • 2、字符串切片基本语法
    • 3、字符串切片小口诀
    • 4、字符串切片的小栗子
  • 四、字符串的操作方法(内置)
    • 1、字符串中的查找方法
      • ☆ find()方法
      • ☆ index()方法
    • 2、字符串的修改方法
      • ☆ replace()方法
      • ☆ split()方法
      • ☆ join()方法
      • ☆ upper()与lower() 方法
    • 3、字符串的判断方法
      • ☆ startswith()
      • ☆ endswith()
  • 五、列表及其应用场景
    • 1、为什么需要列表
    • 2、列表的定义
    • 3、列表的相关操作
      • ☆ 查操作
      • ☆ 增操作
        • ☆ append()
        • ☆ extend()方法
        • ☆ insert()方法
      • ☆ 删操作
        • ☆ del删除指定的列表元素
        • ☆ pop()方法
        • ☆ remove()方法
        • ☆ clear()方法
      • ☆ 改操作
    • 4、列表的循环遍历
    • 5、列表的嵌套
  • 六、元组的定义与使用
    • 1、为什么需要元组
    • 2、元组的定义
    • 3、元组的应用场景(这个技术在未来工作中的应用场景)
    • 4、元组的相关操作方法

Python数据序列(容器)

一、作业回顾

1、面试题

有一物,不知其数,三三数之余二,五五数之余三,七七数之余二,问物几何?

白话文:有一个数字,不知道具体是多少,用3去除剩2,用5去除剩3,用7去除剩2个,问这个数是多少?1 ~ 100以内的整数

while循环:

# 初始化计数器
i = 1
# 编写循环条件
while i <= 100:
    # 判断
    if i % 3 == 2 and i % 5 == 3 and i % 7 == 2:
        print(i)
    # 更新计数器
    i += 1

for循环:

for i in range(1, 101):
    # 判断
    if i % 3 == 2 and i % 5 == 3 and i % 7 == 2:
        print(i)

2、报数字(数7)

在这里插入图片描述

一些同学从1开始报数,当需要报出的数字尾数是7或者该数字是7的倍数时,则该同学跳过这个数字,不进行报数。所有同学都参与游戏后,游戏结束。如输入学生数量为50,游戏结束后,报数的同学数量为39。

分析:如何判断某个数字尾数为7以及如何判断某个数字是7的倍数

① 如何判断数字尾数为7,i % 10 == 7 17 % 10 = 1 余 7 27 % 10 = 2 余 7

② 如何判断数字是7的倍数,i % 7 == 0

# 定义一个变量n,用于获取学生数量
n = int(input('请输入学生的数量:'))
# 定义一个变量,用于统计有多少人报数了
count = 0
# 开始循环
for i in range(1, n+1):
    # 判断数字尾数为7
    if i % 10 == 7:
        continue
    # 判断数值是7的倍数
    if i % 7 == 0:
        continue
    # 如果不满足以上if条件,则对count进行+1操作
    count += 1
print(f'{n}个同学,共报数{count}人')

二、了解字符串

1、字符串的定义

字符串是 Python 中最常用的数据类型。我们一般使用引号来创建字符串。创建字符串很简单,只要为变量分配一个值即可。

案例1:使用单引号或双引号定义字符串变量

str1 = 'abcdefg'
str2 = "hello world"

print(type(str1))  # <class 'str'>  ##输出
print(type(str2))  # <class 'str'>

案例2:使用3个引号定义字符串变量

name1 = '''I am Tom, Nice to meet you!'''
print(name1)
print(type(name1))

print('-' * 20)

name2 = """I am Jennify,
           Nice to meet you!"""
print(name2)
print(type(name2))

注意:三引号形式的字符串支持换行操作

案例3:思考如何使用字符串定义"I’m Tom"

使用单引号情况

str1 = 'I'm Tom'

运行结果:

在这里插入图片描述

出现以上问题的主要原因在于,以上字符串的定义代码出现了(syntax)语法错误。单引号在字符串定义中必须成对出现,而且Python解析器在解析代码时,会自动认为第一个单引号和最近的一个单引号是一对!

如果一定要在单引号中在放入一个单引号,必须使用反斜杠进行转义。

str1 = 'I\'am Tom'

使用双引号情况

str2 = "I'm Tom"

注:在Python中,如果存在多个引号,建议① 单引号放在双引号中 ② 双引号放在单引号中。

2、字符串输入

在Python代码中,我们可以使用input()方法来接收用户的输入信息。记住:在Python中,input()方法返回的结果是一个字符串类型的数据。

name = input('请输入您的姓名:')
age = input('请输入您的年龄:')
address = input('请输入您的住址:')

print(name, age, address)

① input()可以阻断当前正在执行的代码,让系统处于等待状态,直到用户输入完成

② input()方法接收到的所有数据,返回的数据类型都是字符串

3、字符串的输出

☆ 普通输出

print(变量名称)
print(变量名称1, 变量名称2, 变量名称3)

☆ 格式化输出

① 百分号(Python2和Python3)

name = input('请输入您的姓名:')
age = int(input('请输入您的年龄:'))
address = input('请输入您的住址:')

print('我的名字是%s,今年%d岁了,家里住在%s...' % (name, age, address))

② format方法(Python3)

name = input('请输入您的姓名:')
age = input('请输入您的年龄:')
address = input('请输入您的住址:')

print('我的名字是{},今年{}岁了,家里住在{}...'.format(name, age, address))

③ f形式(Python3)

name = input('请输入您的姓名:')
age = input('请输入您的年龄:')
address = input('请输入您的住址:')

print(f'我的名字是{name},今年{age}岁了,家里住在{address}...')

延伸:

name = input('请输入您购买商品的名称:')
price = float(input('请输入您购买商品的价格:'))  # 18.5

print(f'购买商品名称:{name},商品价格:{price:.2f}')

4、字符串在计算机底层的存储形式

在计算机中,Python中的字符串属于序列结构。所以其底层存储占用一段连续的内存空间。

str1 = 'itheima'

结构原理图:

索引的最大值 = len(字符串) - 1

7个字符,则索引下标的最大值为7-1 = 6

在这里插入图片描述

注意:索引下标从0开始。

5、聊聊索引下标

索引下标,就是编号。比如火车座位号,座位号的作用:按照编号快速找到对应的座位。同理,下标的作用即是通过下标快速找到对应的数据。

在这里插入图片描述

举个例子:

name = 'abcdef'
print(name[0])  # a
print(name[3])  # d

在这里插入图片描述

三、字符串切片

1、什么是字符串切片

所谓的切片是指对操作的对象截取其中一部分的操作。字符串、列表、元组都支持切片操作。

2、字符串切片基本语法

顾头不顾尾:

序列名称[开始位置下标:结束位置下标:步长(步阶)]

numstr = '0123456789'
numstr[0:3:1]  # 012 => range方法非常类似,步长:每次前进1步
numstr[0:3:2]  # 02 => 每次前进2步
步长可以为负数,正数代表从左向右截取,负数代表从右向左截取

① 不包含结束位置下标对应的数据, 正负整数均可;

② 步长是选取间隔,正负整数均可,正数从左向右,负数从右向左。默认步长为1。

还是有点陌生,没关系,给你举个栗子:

numstr = '0123456789'

如果想对numstr字符串进行切片,如下图所示:

在这里插入图片描述

3、字符串切片小口诀

记口诀:切片其实很简单,只顾头来尾不管,步长为正正向移,步长为负则逆向移

如果还是有点不太清楚这个原理,建议大家对字符串进行画图

在这里插入图片描述

4、字符串切片的小栗子

案例1:

numstr = '0123456789'
# 1、从2到5开始切片,步长为1
print(numstr[2:5:1])
print(numstr[2:5])
# 2、只有结尾的字符串切片:代表从索引为0开始,截取到索引为5的位置(不包含索引为5的数据)
print(numstr[:5])
# 3、只有开头的字符串切片:代表从起始位置开始,已知截取到字符串的结尾
print(numstr[1:])
# 4、获取或拷贝整个字符串
print(numstr[:])
# 5、调整步阶:类似求偶数
print(numstr[::2])
# 6、把步阶设置为负整数:类似字符串翻转
print(numstr[::-1])
# 7、起始位置与结束位置都是负数
print(numstr[-4:-1])
# 8、结束字符为负数,如截取012345678
print(numstr[:-1])

案例2:

在这里插入图片描述

案例3:给定一个图片的名称为"avatar.png",使用Python方法获取这个图片的名称(avatar)以及这个图片的后缀(.png)。

分析:

① 建议先获取点号的位置(目前还未学习,只能一个一个数)

② 从开头切片到点号位置,得到的就是文件的名称

③ 从点号开始切片,一直到文件的结尾,则得到的就是文件的后缀

filename = 'avatar.png'
# 获取点号的索引下标
index = 6
# 使用切片截取文件的文件
name = filename[:index]
print(f'上传文件的名称:{name}')

# 使用切片截取文件的后缀
postfix = filename[index:]
print(f'上传文件的后缀:{postfix}')

四、字符串的操作方法(内置)

1、字符串中的查找方法

所谓字符串查找方法即是查找子串在字符串中的位置或出现的次数

基本语法:

字符串.find(要查找的字符或者子串)
编号函数作用
1find()检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则返回-1。
2index()检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则报异常。

☆ find()方法

作用:检测某个子串是否包含在这个字符串中,如果在返回这个子串开始的位置下标,否则则返回-1。

# 定义一个字符串
str1 = 'hello world hello linux hello python'
# 查找linux子串是否出现在字符串中
print(str1.find('linux'))
# 在str1中查找不存在的子串
print(str1.find('and'))

案例:使用input方法输入任意一个文件名称,求点号的索引下标

filename = input('请输入您要上传文件的名称:')
# 获取点号的索引下标
index = filename.find('.')
print(index)

# 求文件名称
print(filename[:index])

# 求文件后缀
print(filename[index:])
请输入您要上传文件的名称:上海.jpg
2
上海
.jpg

请输入您要上传文件的名称:shanghai.jpg
8
shanghai
.jpg

☆ index()方法

index()方法其功能与find()方法完全一致,唯一的区别在于当要查找的子串没有出现在字符串中时,find()方法返回-1,而index()方法则直接报错。

str1 = 'apple, banana, orange'
# 判断apple是否出现在字符串str1中
print(str1.index('apple'))
print(str1.index('pineapple'))

运行结果:

在这里插入图片描述

2、字符串的修改方法

所谓修改字符串,指的就是通过函数(方法)的形式修改字符串中的数据。

编号函数作用
1replace()返回替换后的字符串
2split()返回切割后的列表序列
3title()所有单词首字母大写
4upper()与lower()返回全部大写或小写的字符串

☆ replace()方法

基本语法:

字符串.replace(要替换的内容, 替换后的内容, 替换的次数-可以省略)

案例:编写一个字符串,然后把字符串中的linux替换为python

str1 = 'hello linux and hello linux'
# 把字符串中所有linux字符替换为python
print(str1.replace('linux', 'python'))
# 把字符串中的第一个linux进行替换为python
print(str1.replace('linux', 'python', 1))
# 把and字符串替换为&&
print(str1.replace('and', '&&'))

目前在工作中,replace主要用于实现关键字替换或过滤功能。北京 ==> BJ,论坛关键字过滤

☆ split()方法

作用:对字符串进行切割操作,返回一个list()列表类型的数据

str1 = 'apple-banana-orange'   #字符
print(str1.split('-'))    
输出结果: 
['apple', 'banana', 'orange']   #list集合

☆ join()方法

作用:和split()方法正好相反,其主要功能是把序列拼接为字符串

字符串.join(数据序列)   

案例:把水果列表[‘apple’, ‘banana’, ‘orange’]拼接成’apple-banana-orange’

list1 = ['apple', 'banana', 'orange']  #list集合
print('-'.join(list1))
输出结果:
apple-banana-orange      #字符串

☆ upper()与lower() 方法

upper():把字符串全部转换为大写形式

lower():把字符串全部转换为小写形式

# 用户名以及密码验证案例
username = input('请输入您的账号:')
password = input('请输入您的密码:')

# 把username和password全部转换为大写或小写
print(username.lower())
print(password.upper())

输出结果:

请输入您的账号:zhanngSAN
请输入您的密码:Mima
zhanngsan
MIMA

3、字符串的判断方法

所谓判断即是判断真假,返回的结果是布尔型数据类型:True 或 False。

编号函数作用
1startswith()检查字符串是否是以指定子串开头,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。
2endswith()检查字符串是否是以指定子串结尾,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。

☆ startswith()

作用:检查字符串是否是以指定子串开头,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。

str1 = 'python program'
print(str1.startswith('python'))

输出结果:
True

☆ endswith()

作用:检查字符串是否是以指定子串结尾,是则返回 True,否则返回 False。如果设置开始和结束位置下标,则在指定范围内检查。

str2 = 'avatar.png'
print(str2.endswith('.png'))

if str2.endswith('.png') or str2.endswith('.jpg') or str2.endswith('.gif'):
    print('是一张图片格式的图片')
else:
    print('您上传的文件格式异常')

五、列表及其应用场景

1、为什么需要列表

思考:有一个人的姓名(TOM)怎么书写存储程序?

答:变量。

思考:如果一个班级100位学生,每个人的姓名都要存储,应该如何书写程序?声明100个变量吗?

答:No,我们使用列表就可以了, 列表一次可以存储多个数据。

在Python中,我们把这种数据类型称之为列表。但是在其他的编程语言中,如Java、PHP、Go等等中其被称之为数组。

2、列表的定义

列表序列名称 = [列表中的元素1, 列表中的元素2, 列表中的元素3, ...]

案例演示:定义一个列表,用于保存苹果、香蕉以及菠萝

list1 = ['apple', 'banana', 'pineapple']
# list列表类型支持直接打印
print(list1)
# 打印列表的数据类型
print(type(list1))  # <class 'list'>

注意:列表可以一次存储多个数据且可以为不同的数据类型

3、列表的相关操作

列表的作用是一次性存储多个数据,程序员可以对这些数据进行的操作有:

增、删、改、查

☆ 查操作

列表在计算机中的底层存储形式,列表和字符串一样,在计算机内存中都占用一段连续的内存地址,我们向访问列表中的每个元素,都可以通过==“索引下标”==的方式进行获取。

在这里插入图片描述

如果我们想获取列表中的某个元素,非常简单,直接使用索引下标:

list1 = ['apple', 'banana', 'pineapple']
# 获取列表中的banana
print(list1[1])

查操作的相关方法:

编号函数作用
1index()指定数据所在位置的下标【有返回下表,无会报错】
2count()统计指定数据在当前列表中出现的次数【重复出现次数】
3in判断指定数据在某个列表序列,如果在返回True,否则返回False
4not in判断指定数据不在某个列表序列,如果不在返回True,否则返回False

举个栗子:

# 1、查找某个元素在列表中出现的位置(索引下标)
list1 = ['apple', 'banana', 'pineapple']
print(list1.index('apple'))  # 0
# print(list1.index('peach'))  # 报错

# 2、count()方法:统计元素在列表中出现的次数
list2 = ['刘备', '关羽', '张飞', '关羽', '赵云']
# 统计一下关羽这个元素在列表中出现的次数
print(list2.count('关羽'))

# 3、in方法和not in方法(黑名单系统)
list3 = ['192.168.1.15', '10.1.1.100', '172.35.46.128']
if '10.1.1.100' in list3:
    print('黑名单IP,禁止访问')
else:
    print('正常IP,访问站点信息')

☆ 增操作

编号函数作用
1append()增加指定数据到列表中
2extend()列表结尾追加数据,如果数据是一个序列,则将这个序列的数据逐一添加到列表
3insert()指定位置新增数据

☆ append()

append() :在列表的尾部追加元素

names = ['孙悟空', '唐僧', '猪八戒']
# 在列表的尾部追加一个元素"沙僧"
names.append('沙僧')
# 打印列表
print(names)
输出结果;
['孙悟空', '唐僧', '猪八戒', '沙僧']

注意:列表追加数据的时候,直接在原列表里面追加了指定数据,即修改了原列表,故列表为可变类型数据。

☆ extend()方法

列表结尾追加数据,如果数据是一个序列,则将这个序列的数据逐一添加到列表

案例:

list1 = ['Tom', 'Rose', 'Jack']
# 1、使用extend方法追加元素"Jennify"
# names.extend("Jennify")
# print(names)

# 2、建议:使用extend方法两个列表进行合并
list2 = ['Hack', 'Jennify']
list1.extend(list2)

print(list1)
输出结果:
['Tom', 'Rose', 'Jack', 'Hack', 'Jennify']

总结:extend方法比较适合于两个列表进行元素的合并操作

☆ insert()方法

作用:在指定的位置增加元素[指定插入索引位置]

names = ['薛宝钗', '林黛玉']
# 在薛宝钗和林黛玉之间,插入一个新元素"贾宝玉"
names.insert(1, '贾宝玉')
print(names)
输出结果:
['薛宝钗', '贾宝玉', '林黛玉']

☆ 删操作

编号函数作用
1del 列表[索引]删除列表中的某个元素
2pop()删除指定下标的数据(默认为最后一个),并返回该数据
3remove()移除列表中某个数据的第一个匹配项。
4clear()清空列表,删除列表中的所有元素,返回空列表。

☆ del删除指定的列表元素

基本语法:

names = ['Tom', 'Rose', 'Jack', 'Jennify']
# 删除Rose
del names[1]
# 打印列表
print(names)
输出结果:
['Tom', 'Jack', 'Jennify']

☆ pop()方法

作用:删除指定下标的元素,如果不填写下标,默认删除最后一个。其返回结果:就是删除的这个元素

names = ['貂蝉', '吕布', '董卓']
del_name = names.pop()
# 或
# del_name = names.pop(1)
print(del_name)
print(names)
输出结果:
董卓
['貂蝉', '吕布']

☆ remove()方法

作用:删除匹配的元素

fruit = ['apple', 'banana', 'pineapple']
fruit.remove('banana')
print(fruit)
输出结果:

☆ clear()方法

清空列表

names = ['貂蝉', '吕布', '董卓']
# 随着故事的发展,人物都game over
names.clear()
# 打印列表
print(names)
输出结果:
['apple', 'pineapple']

☆ 改操作

编号函数作用
1列表[索引] = 修改后的值修改列表中的某个元素
2reverse()将数据序列进行倒叙排列
3sort()对列表序列进行排序
list1 = ['貂蝉', '大乔', '小乔', '八戒']
# 修改列表中的元素
list1[3] = '周瑜'
print(list1)

list2 = [1, 2, 3, 4, 5, 6]
list2.reverse()
print(list2)

list3 = [10, 50, 20, 30, 1]
list3.sort()  # 升序(从小到大)
# 或
# list3.sort(reverse=True)  # 降序(从大到小)
print(list3)

4、列表的循环遍历

什么是循环遍历?答:循环遍历就是使用while或for循环对列表中的每个数据进行打印输出

while循环:

list1 = ['貂蝉', '大乔', '小乔']

# 定义计数器
i = 0
# 编写循环条件
while i < len(list1):
    print(list1[i])
    # 更新计数器
    i += 1

for循环(个人比较推荐):

list1 = ['貂蝉', '大乔', '小乔']
for i in list1:
    print(i)

5、列表的嵌套

列表的嵌套:列表中又有一个列表,我们把这种情况就称之为列表嵌套

在其他编程语言中,称之为叫做二维数组或多维数组

应用场景:要存储班级一、二、三 => 三个班级学生姓名,且每个班级的学生姓名在一个列表。

classes = ['第一个班级','第二个班级','第三个班级']

一班:['张三', '李四']
二班:['王五', '赵六']
三班:['田七', '孙八']

把班级和学员信息合并在一起,组成一个嵌套列表
students = [['张三', '李四'],['王五', '赵六'],['田七', '孙八']]

students = [x,y,z]
students[0] == ['张三', '李四']
students[0][1]

问题:嵌套后的列表,我们应该如何访问呢?

# 访问李四
print(students[0][1])
# 嵌套列表进行遍历,获取每个班级的学员信息
for i in students:
    print(i)

六、元组的定义与使用

1、为什么需要元组

思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做?

答:列表?列表可以一次性存储多个数据,但是列表中的数据允许更改。

num_list = [10, 20, 30]
num_list[0] = 100

那这种情况下,我们想要存储多个数据且数据不允许更改,应该怎么办呢?

答:使用元组,元组可以存储多个数据且元组内的数据是不能修改的。

2、元组的定义

元组特点:定义元组使用小括号,且使用逗号隔开各个数据,数据可以是不同的数据类型。

基本语法:

# 多个数据元组
tuple1 = (10, 20, 30)

# 单个数据元组
tuple2 = (10,)

注意:如果定义的元组只有一个数据,那么这个数据后面也要添加逗号,否则数据类型为唯一的这个数据的数据类型。

3、元组的应用场景(这个技术在未来工作中的应用场景)

  • 函数的参数和返回值,一个函数可以接受任意多个参数,或者依次返回多个数据(暂时了解)

  • 格式化字符串,百分号和format,格式化字符串后面的()本质上就是一个元组

    print(‘姓名:%s,年龄:%d,家庭住址:%s’ % (name, age, address))

  • 让列表不可以修改,以保护数据安全

4、元组的相关操作方法

由于元组中的数据不允许直接修改,所以其操作方法大部分为查询方法。

编号函数作用
1元组[索引]根据索引下标查找元素
2index()查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index方法相同
3count()统计某个数据在当前元组出现的次数
4len()统计元组中数据的个数

案例1:访问元组中的某个元素

nums = (10, 20, 30)
print(nums[2])

案例2:查找某个元素在元组中出现的位置,存在则返回索引下标,不存在则直接报错

nums = (10, 20, 30)
print(nums.index(20))

案例3:统计某个元素在元组中出现的次数

nums = (10, 20, 30, 50, 30)
print(nums.count(30))

案例4:len()方法主要就是求数据序列的长度,字符串、列表、元组

nums = (10, 20, 30, 50, 30)
print(len(nums))

作方法

由于元组中的数据不允许直接修改,所以其操作方法大部分为查询方法。

编号函数作用
1元组[索引]根据索引下标查找元素
2index()查找某个数据,如果数据存在返回对应的下标,否则报错,语法和列表、字符串的index方法相同
3count()统计某个数据在当前元组出现的次数
4len()统计元组中数据的个数

案例1:访问元组中的某个元素

nums = (10, 20, 30)
print(nums[2])

案例2:查找某个元素在元组中出现的位置,存在则返回索引下标,不存在则直接报错

nums = (10, 20, 30)
print(nums.index(20))

案例3:统计某个元素在元组中出现的次数

nums = (10, 20, 30, 50, 30)
print(nums.count(30))

案例4:len()方法主要就是求数据序列的长度,字符串、列表、元组

nums = (10, 20, 30, 50, 30)
print(len(nums))

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

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

相关文章

蓝桥杯备赛(二)

目录 前言&#xff1a; 一、ASC 分析 代码实现 二、 卡片 分析 代码实现 三、 直线 分析 代码实现 四、货物摆放 分析 代码实现 小结&#xff1a; 前言&#xff1a; 在刷题的过程中&#xff0c;发现蓝桥杯的题目和力扣的差别很大。让人有一种不一样的感觉&#xff…

【IO】文件操作基础知识

目录 1.文件的操作&#xff1a; 2.文件内容的读写—数据流&#xff1a; 3.文件操作练习&#xff1a; 1.文件的操作&#xff1a; 文件分为狭义上的文件和广义的文件。狭义上的文件&#xff1a;存储在硬盘上的数据&#xff0c;以“文件”为单位进行组织。文件夹也叫做目录。通…

图第三遍补充(各种算法与力扣)

一、一些补充的概念 如果具有n个结点的图中是一个环&#xff0c;则会有n个不同的生成树&#xff0c;每个生成树有n-1条边 连通、连通图、连通分量&#xff1a;路径&#xff0c;无向图 &#xff0c;极大连通子图为连通分量&#xff0c;边数小于n-1&#xff0c;则图必为非连通图…

Xilinx XC7Z020双核ARM+FPGA开发板试用合集——自定义硬件工程

本期测试板卡是一款基于Xilinx Zynq-7000系列XC7Z010/XC7Z020高性能低功耗处理器设计的异构多核SoC工业级核心板,处理器集成PS端双核ARM Cortex-A9 + PL端Artix-7架构28nm可编程逻辑资源。 下面是测试内容,欢迎查阅。 SD卡启动设置 根据《TLZ7x-EasyEVM-S评估板硬件说明书》…

开心消消乐游戏网页设计作品 学生dreamweaver作业静态HTML网页设计模板 游戏主题网页作业制作

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

有营养的算法笔记(八)

有营养的算法笔记八摆砖块问题数字转换K递增子序列魔法子数组摆砖块问题 1.题目描述 给定一个正数数组arr&#xff0c;其中每个值代表砖块长度。所有砖块等高等宽&#xff0c;只有长度有区别&#xff0c;每一层可以用1块或者2块砖来摆。要求每一层的长度一样 要求必须使用所有…

【阅读笔记】低照度图像增强-《An Integrated Neighborhood Dependent...

本文介绍的是一种比较实用的低照度图像增强算法&#xff0c;选自2004年Tao的一篇论文&#xff0c;名称是《An Integrated Neighborhood Dependent Approach for Nonlinear Enhancement of Color Images 》 概述 图像中暗区图像增强的基本机制是对图像的亮度进行动态范围压缩&…

玩转rancher 2.6之 monitor监控

目录 前言 1. 安装monitor 2. 安装prometheus-webhook-dingtalk 2.1 配置钉钉告警配置文件 2.2 创建钉钉告警模板 2.3 创建dingtalk configmap配置文件 2.4 安装dingtalk 2.5 dingtalk调用方法 3. 配置告警 3.1 配置告警接收者 3.2 配置路由默认告警接收者 4. 测试 前…

初识C++ (三)

初识C 三引用一. 引用的概念代码演示二. 引用特性1. 引用在定义时必须要初始化2. 一个引用可以有多个实体3. 引用一旦引用一个实体&#xff0c;再不能引用其他实体三. 使用场景1. 做参数2. 做返回值内存销毁后空间还在吗&#xff1f;内存销毁后我们还能访问嘛&#xff1f;结论优…

论文写作——ICASSP论文写作及投稿

记录 ICASSP2023 写作投稿过程。小白如何写好并投稿自己的第一篇英文论文&#xff1f;投稿会议时&#xff08;以 ICASSP2023 为例&#xff09;有哪些需要关注的信息以及注意事项&#xff1f;论文写作必备软件有哪些&#xff1f;论文书写关注点有哪些&#xff1f;论文格式与排版…

【Node.JS 】http的概念及作用

往期文章 【Node.JS 练习】时钟案例 【Node.JS 】path路径模块 【Node.JS 练习】考试成绩整理 【Node.JS】buffer类缓冲区 【Node.JS】事件的绑定与触发 【Node.JS】写入文件内容 【Node.JS】读取文件内容 什么是http模块 在网络节点中&#xff0c;负责消费资源的电脑&…

【C语言】C语言文件操作详解(一)

前言 本章主要讨论的是数据文件&#xff0c;如何使用C语言对数据文件进行输入输出数据的操作&#xff0c;以及文件顺序读写涉及的库函数详解 目录前言1.为什么使用文件2.什么是文件2.1程序文件2.2数据文件2.3文件名3.文件的打开和关闭3.1文件指针3.2文件的打开3.3文件的关闭3.…

初识JAVA

文章目录初识 java 的 main 方法main 方法示例运行Java程序注释基本规则注释规范标识符关键字初识 java 的 main 方法 main 方法示例 public class test {public static void main(String[] args) {System.out.println("hello world!");} }如果我们学的C语言&#…

DASCTF X GFCTF 2022十月挑战赛 Writeup

文章目录WEBEasyPOPMISC滴滴图ez_xxdpoi&#xff1f;qoi&#xff01;easy_dotsdockermiscWEB EasyPOP Fast Destruct优先一步__wakeup()执行析构函数 从一道题看fast_destruct fine::__invoke() <- sorry::__get() <- secret_code::show() <- secret_code::__call…

使用 MySQL 日志 - Part 1

在软件应用程序中&#xff0c;日志文件会记录系统中执行的操作以及执行操作的人员。如果出现意外情况&#xff0c;无论是安全漏洞、系统崩溃还是性能迟缓&#xff0c;日志文件都可以成为管理员的得力助手。MySQL 就有几个不同的日志文件&#xff0c;可以帮助你找出 MySQL 服务器…

Excel多条件计数——COUNTIFS【获奖情况统计】

问题描述 当前&#xff0c;我们需要对表格中的获奖情况进行统计 奖励级别&#xff1a;院级、校级、国家级、国际级奖励内容&#xff1a;特等奖、一等奖、二等奖、三等奖、优胜奖 功能要求 对所有奖励级别进行统计根据级别&#xff0c;计算内容数量 当有人的选项内容如下时 …

MySQL之SQL的执行流程

MySQL之SQL的执行流程MySQL架构连接层服务层存储引擎连接查看连接连接与线程连接超时最大连接会话与全局查询缓存语法解析和预处理词法解析语法解析预处理查询优化器优化器查询执行计划存储引擎存储引擎概述常用存储引擎MyISAMInnoDBMEMORY存储引擎的选择执行引擎MySQL架构 从…

DBMS 中的 2 层架构与 3 层架构

有多种方法可以获取存储在数据库管理系统中的数据。根据其结构对 DBMS 的体系结构进行了分类。 DBMS 架构概述 理解 2-tier 和 3-tier 架构是一个相当重要的话题&#xff0c;不仅对于学术或寻找好工作&#xff0c;而且对于与技术相关的一般意识也是如此。 2-tier simple表示两…

【每日渗透笔记】覆盖漏洞+修改隐藏数据实战尝试

目录 一、特点&#xff1a; 1.1、特征&#xff1a; 1.2、知识&#xff1a; 1.3、注册的功能点&#xff1a; 目前&#xff1a; 问题&#xff1a; 二、分析数据包 2.1、修改数据处 三、换思路 一、特点&#xff1a; 1.1、特征&#xff1a; 存在注册的功能点 1.2、知识&a…

资本狂欢过后 Aptos如何顶住旧日光环?

10月27日&#xff0c;Aptos Autumn主网上线一周后&#xff0c;其浏览器数据显示&#xff0c;该Layer1网络的交易总量为1432万笔&#xff0c;TPS为10.65&#xff0c;原生Token APT总供应量约为10.02亿&#xff0c;质押数量约为8.23亿枚&#xff0c;活跃节点数量102个。 低TPS、高…