初始Python篇(6)—— 字符串
找往期文章包括但不限于本期文章中不懂的知识点:
个人主页:我要学编程(ಥ_ಥ)-CSDN博客
所属专栏: Python
目录
字符串的常见操作
格式化字符串
占位符
f-string
字符串的 format 方法
字符串的编码与解码
与数据验证相关的方法
字符串的拼接
字符串的去重操作
字符串的常见操作
字符串是Python中的不可变数据类型,在最开始时,我们只是简单地学习了字符串的使用,并未深入研究。既然字符串也是一种数据类型,那么它是否也和前面学习的列表、字典、集合这些数据类型一样有着大量的操作方法呢?答案是有的,我们今天就来深入学习这些方法。
方法名 | 说明 |
lower() | 将字符串str全部转成小写字母,结果为一个新的字符串 |
upper() | 将字符串str全部转成大写字母,结果为一个新的字符串 |
split(set=None) | 把str按照指定的分隔符sep进行分隔,分割之后的结果为列表类型,其中的元素便是被分割后的字符串 |
count(sub) | 结果为sub的这个字符串在str中出现的次数 |
find(sub) | 查询sub这个字符串在str中是否存在,如果不存在结果为-1,如果存在结果为sub首次出现的索引 |
index(sub) | 功能与find(相同,区别在于要查询的子串sub不存在时,程序报错 |
startswith(s) | 查询字符串str是否以字符串s开头 |
endswith(s) | 查询字符串str是否以字符串s结尾 |
replace(old, news) | 使用news替换字符串s中所有的old字符串,结果是一个新的字符串 |
center(width, fillchar) | 字符串str在指定的宽度范围内居中,可以使用fillchar进行填充 |
join(iter) | 在iter中的每个元素的后面都增加一个新的字符串str |
strip(chars) | 从字符串中去掉左侧和右侧chars中列出的字符串 |
lstrip(chars) | 从字符串中去掉左侧chars中列出的字符串 |
rstrip(chars) | 从字符串中去掉右侧chars中列出的字符串 |
代码演示:
str = 'Hello Python'
print('开始一系列字符串操作')
lower_str = str.lower()
print('将字符串变成小写:',lower_str)
upper_str = str.upper()
print('将字符串变成大写:',upper_str)
list = str.split(' ')
print('以空格分割字符串:',list)
count = str.count('o')
print('字符串中"o"出现的次数:',count)
a = str.find('o')
b = str.index('o')
print('字符串中"o"出现的索引位置:',a,b)print('字符串是不是以"hello"作为起始子串呢?',str.startswith('hello'))
print('字符串是不是以"Hello"作为起始子串呢?',str.startswith('Hello'))print('字符串是不是以"python"作为结束子串呢?',str.endswith('python'))
print('字符串是不是以"Python"作为起始子串呢?',str.endswith('Python'))
运行结果:
注意:在判断是否为起始子串、结束子串时,参数中的字符串不需要是子串,也可以是非子串。上述代码中的 "hello" 便是非子串。
从上述的结果,也可以看出字符串的相关操作并不会改变字符串本身。简单理解就是 全都是生成一个新的字符列表对象,然后在这个列表中进行一系列的操作,然后改成新的字符串返回。
我们再来通过代码实现剩下的方法操作。
代码演示:
str = 'Hello Python'# 替换字符串中的部分字符
print(str.replace('Hello','Hi')) # 在最后面还可以指定参数
print(str.replace('Hello','Hi',0)) # 指定替换0次,即不替换# 填充部分字符,是字符串在指定的范围内处于居中位置
print(str.center(20)) # 在长度为20的空间中,默认使用空白字符填充,是字符串处于居中位置
print(str.center(20, '*')) # 在上面的基础上,使用"*"进行填充
print(str.center(10,'*')) # 当字符串本身超出 width 时,就直接打印输出# 在字符串str后面的每个字符元素中,加上" "(两个空格)
print(' '.join(str))# 将 ' hhh ' 中的空格全部去掉(默认是去掉空格),再使用'*'去替换空格
print(' hhh '.strip().replace(' ','*'))
print(' hhh '.replace(' ','*'))
# 观察上面两个的不同,或者写成下面这样print('***hhh***'.strip('*')) # 直接将'*'从字符串中去除
print('***hhh***'.lstrip('*')) # 直接将左边'*'从字符串中去除
print('***hhh***'.rstrip('*')) # 直接将右边'*'从字符串中去除
# 注意下面这种情况,是不能成功去除的
print('*1**hhh***'.lstrip('*')) # 在去除'*'字符的过程中,遇到非'*'字符之后,就会停止去除print('经过一系列的字符串操作之后,原字符串为:'+str)
运行结果:
格式化字符串
常见的格式化字符串方式有三种:1、占位符的形式;2、f-string的形式;3、str.format()的形式。
占位符
在Python中常用的占位符有三个:1、%s -> 代指字符串;2、%d -> 代指十进制的整数;3、%f -> 代指浮点数。
语法格式:
# 可以理解为是将后面的参数直接带入到 %s、%d、%f 中
# 这里的 %s、%d、%f 只是占了个位置罢了,故名:占位符
# str % () --> 字符串 % 元组,占位符使用元组来替代
print('姓名: %s, 年龄: %d, 成绩: %f' % (name, age, score))
代码演示:
name = '马冬梅'
age = 18
score = 98.5# 使用了 .1f 之后,可以让浮点数只输出一位
print('姓名:%s, 年龄:%d, 成绩:%f' % (name, age, score))
print('姓名:%s, 年龄:%d, 成绩:%.1f' % (name, age, score))
除了上述 .1f 之外,还有 5d 这种写法,小数点后面的是保证位数,小数点前面的是保证输出总长度,当总长度小于我们设置的总长度时,就会使用空格填充,如果是 5d 的写法,就是填充在左边,也就是右对齐;反之,如果是 -5d 的写法,就是填充在右边,也就是左对齐的写法。 scanf与printf函数的详细介绍及其用法_printf 换行符-CSDN博客 可以去看这篇文章,介绍的比较详细,虽然是C语言,但是概念是差不多的(输出格式)。
f-string
语法格式:
# f-string ,使用的就是 fstring的形式
# 这里是把要使用变量替代的全部放到了{}中,这样在打印时,就会将{}中的变量替换为真实的值
print(f'姓名: {name}, 年龄: {age}, 成绩:{score}')
代码演示:
name = '马冬梅'
age = 18
score = 98.5# 使用f-string
print(f'姓名:{name}, 年龄:{age}, 成绩:{score}')
字符串的 format 方法
语法格式:
# str.format() 与 f-string 有点类似,都是使用 {} 来标明需要替换的元素
# 但是 f-string 是直接从上文中取,而 str.format 是从format参数中寻找
# 0、1、2 对应的是 format参数中索引的位置,0 是 name的索引,所以就让 name 来替换0
print('姓名: {0}, 年龄:{1}, 成绩:{2}'.format(name, age, score))
# 下面的写法也是符合要求的,2 是 name的索引,所以使用name来替换2
print('姓名:{2}, 年龄:{1}, 成绩:{0}'.format(score, age, name))
代码演示:
name = '马冬梅'
age = 18
score = 98.5# 使用字符串的format方法
print('姓名:{0}, 年龄:{1}, 成绩:{2}'.format(name, age, score))
# 上述的0、1、2指的是format方法中的参数的索引位置,可以写成下面这样
print('姓名:{2}, 年龄:{1}, 成绩:{0}'.format(score, age, name))
上面三种格式化的方式,写在一起的运行结果:
格式化字符串的详细格式还是有很多的,下面来认识其他的格式。
代码演示:
s = 'Hello Python'
# 直接使用0去代指format中的参数
print('{0}'.format(s))
# : 是引导符,表明后面开始的操作是对参数的格式化
# * 是填充符,表明当长度不足时,使用 * 来填充
# < 是向左对齐、20 是字符串的总长度,不足时使用填充符来填充
print('{0:*<20}'.format(s))
# ^ 居中对齐、- 使用"-"填充空闲的位置
print('{0:-^20}'.format(s))
# 超出长度,就啥也不做
print('{0:*^5}'.format(s))
# 默认使用 空白字符 填充
print('{0:^20}'.format(s))
运行结果:
代码演示:
# 千位分隔符:只适用于整数与浮点数
# 且针对浮点数时,只会将其整数部分进行分割,而小数部分不会做任何处理
print('{0:,}'.format(1234567890))
print('{0:,}'.format(1234567890.987654321))# .精度 ——> 参数为字符窜时,是显示最大的长度,参数为浮点数时,是显示小数的最大长度
# 针对字符串时,不需要加f,而针对浮点数时,需要加上f
print('{0:.2f}'.format(3.1415926535))
print('{0:.5}'.format('Hello Python'))# 类型
a = 8
print('二进制:{0:b}'.format(a))
print('八进制:{0:o}'.format(a))
print('十进制:{0:d}'.format(a))
print('十六进制:{0:x}'.format(a))
print('十六进制:{0:X}'.format(a))
运行结果:
字符串的编码与解码
我们现在所处的时代是互联网时代,通信的方式也是发生了变化。现在的通信主要是网络通信,一台机器上的数据经过一系列的处理变为了二进制数据,然后再通过网卡以二进制的形式传输出去(电信号的高低电平表示1与0、光信号的频率高低表示1与0) ,这些数据经过互联网就被另一台机器的网卡给接收到了,然后开始对二进制数据进行解析,变为最终通信的数据。上述过程就是不同机器的基本通信过程,如果想要详细了解,可以去看下面的文章。初始JavaEE篇 —— 网络编程(1):基础的网络知识-CSDN博客
在Python中,将字符串的转换为二进制数据的过程就称为编码的过程;反之,将二进制数据转换为字符串的过程就称为解码的过程。
在Python中,编码所使用的方法是 encode,解码所使用的方法是 decode。
语法格式:
# encoding 是指定要编码的方式,默认是utf-8
# errors 是指定编码错误的处理方式,常见的有三种方式:
# 1、strict ——> 遇到编码错误时,直接抛出异常。这也是默认的处理方式
# 2、ignore ——> 直接忽略编码错误的字符,可以认为是直接跳过了这个字符,去处理后面的字符
# 3、replace ——> 用 ? 去代替编码错误的字符str.encode(encoding='utf-8', errors='strict/ignore/replace')bytes.decode(encoding='utf-8', error='strict/ignore/replace')
代码演示:
# 编码过程
s = 'Hello Python'
print('原始的数据:%s' % s)
s_encode = s.encode() # 都采用默认的方式
print('编码之后的数据类型:',type(s_encode))
print('编码之后的结果:',s_encode)# 解码过程
s_decode = s_encode.decode() # 也是采用默认的方式
print('解码之后的结果:%s' % s_decode)
运行结果:
上面是对于英文的编码与解码演示,从结果上面来看就是在要传输的基础上加了个前缀b,同样对于数字字符串也是如此,下面我们来看看中文的编码与解码。
代码演示:
# 编码过程
s = '伟大的中国梦'
print('原始的数据:%s' % s)
s_encode = s.encode() # 都采用默认的方式
print('编码之后的数据类型:',type(s_encode))
print('编码之后的结果:',s_encode)# 解码过程
s_decode = s_encode.decode() # 也是采用默认的方式
print('解码之后的结果:%s' % s_decode)
运行结果:
从上面的对比,我们可以得出一个结论:对于英文字符与数字在经过UTF-8编码后,是不变的,而大多数汉字字符在经过UTF-8之后,一个汉字字符对应着三个编码后的字符。 这是因为在UTF-8编码中规定的是大多数的中文字符占三个字节,而在传统的gbk编码中,中文是占两个字节的,因此使用不同的编码方式,最终形成的字节数也是不同的。
我们接下来就来看编码与解码的方式不同,会出现什么样的问题。
当然我们也可以让其直接忽略或者是用?来替换
# 编码过程
s = '伟大的中国梦'
print('原始的数据:%s' % s)
s_encode = s.encode() # 都采用默认的方式
print('编码之后的数据类型:',type(s_encode))
print('编码之后的结果:',s_encode)# 解码过程
# 采用ascii码值的方式去解码,并且对解码错误的处理方式采用忽略。
# 因为全部的编码都会解码失败,因此最终的解码结果就是啥也没有
s_decode = s_encode.decode(encoding = 'ascii',errors='ignore')
print('解码之后的结果:%s' % s_decode)
运行结果:
下面是使用replace的结果:
与数据验证相关的方法
数据的验证是指程序对用户输入的数据进行“合法”性验证。主要是使用以下八种方法:
方法名 | 说明 |
isdigit() | 所有的字符都是数字(只能是阿拉伯数字) |
isnumeric() | 所有的字符都是数字 |
isalpha() | 所有的字符都是字母(包含中文字符) |
isalnum() | 所有的字符都是数字或者字母(包含中文字符) |
islower() | 所有的字符都是小写 |
isupper() | 所有的字符都是大写 |
istitle() | 所有的字符都是首字母大写 |
isspace() | 所有的字符都是空白字符(制表符(\t)、换行符(\n)等) |
代码演示:
# 判断所有的字符都是数字
# 下面依次是 阿拉伯数字、中文小写、罗马数字、中文大写、二进制数字
print('123'.isdigit()) # True
print('一二三'.isdigit()) # False
print('I'.isdigit()) # False
print('壹'.isdigit()) # False
print('b0101'.isdigit()) # Falseprint('-'*20)# 判断所有的字符都是数字
# 下面依次是 阿拉伯数字、中文小写、罗马数字、中文大写、二进制数字
print('123'.isnumeric()) # True
print('一二三'.isnumeric()) # True
print('I'.isnumeric()) # False
print('壹'.isnumeric()) # True
print('b0101'.isnumeric()) # Falseprint('-'*20)# 判断所有的字符都是字母
print('hello你好'.isalpha()) # True
print('hello你好123'.isalpha()) # False
print('hello 你好'.isalpha()) # Falseprint('-'*20)# 判断所有的字符都是数字或者字母
print('hello你好'.isalnum()) # True
print('hello你好123'.isalnum()) # True
print('hello-你好-123'.isalnum()) # False
print('hello 你好'.isalnum()) # Falseprint('-'*20)# 所有的字符都是小写
# 中文既是大写也是小写
print('hello'.islower()) # True
print('hello你好'.islower()) # True
print('Hello'.islower()) # False
print('HELLO'.islower()) # Falseprint('-'*20)# 所有的字符都是大写
# 中文既是大写也是小写
print('hello'.isupper()) # False
print('hello你好'.isupper()) # False
print('Hello'.isupper()) # False
print('HELLO'.isupper()) # Trueprint('-'*20)# 所有的字符都是首字母大写
# 通过 空格 来区分单词
print('Hello'.istitle()) # True
print('HelloWorld'.istitle()) # False
print('Helloworld'.istitle()) # True
print('Hello World'.istitle()) # Trueprint('-'*20)# 所有的字符都是空白字符
print(' '.isspace()) # True
print('\n'.isspace()) # True
print('\t'.isspace()) # True
print('123\t'.isspace()) # False
字符串的拼接
字符串的拼接是根据数据类型的不同,从而采取不同的方法。例如,当要拼接的数据类型是字符串本身时,完全可以使用 + 的直接拼接方法。
1、使用 str.join() 方法进行拼接字符串
2、直接使用"+"拼接字符串
3、使用格式化字符串进行拼接
代码演示:
s1 = 'hello'
s2 = 'python'# 1、采用 str.join()方法
# 使用字符串的内容去替代参数中的元素之间的分隔符
print(''.join([s1, s2]))
print(''.join((s1, s2)))# 2、直接拼接
print(s1+s2)
# 简单粗暴的方式
print('hello''python')# 3、采用格式化字符串的方式
print(f'{s1}{s2}')
print('{0}{1}'.format(s1, s2))
运行结果:
字符串的去重操作
当字符串中重复出现多个字符时,如果我们想去除重复的字符,拿到不重复的字符,就可以采用下面的方法。
1、遍历字符串,判断是否在新字符串中,不在则加上这个字符,最终遍历完成之后,得到的就是去重之后的字符串。
2、使用哈希的思想(就是使用集合),来去重。
代码演示:
s = 'hello worldhello worldhello worldhello world'
# 1、遍历+判断:
new_s1 = ''
for char in s:if char not in new_s1:new_s1 += char
print(new_s1)new_s2 = ''
for i in range(len(s)):if s[i] not in new_s2:new_s2 += s[i]
print(new_s2)# 2、哈希思想去重
new_s3 = set(s) # 得到的集合中只剩下不重复的元素了
# 但因为集合是无序的,因此我们按照原来字符串的顺序来排序,需要转化为列表
list_S = list(new_s3)
# 将列表中的字符按照字符串中的索引来进行排序
list_S.sort(key=s.index)
# 最终再转换为字符串类型
print(''.join(list_S))
运行结果:
好啦!本期 初始Python篇(6)—— 字符串 的学习之旅 就到此结束啦!我们下一期再一起学习吧!
相关文章:
初始Python篇(6)—— 字符串
找往期文章包括但不限于本期文章中不懂的知识点: 个人主页:我要学编程(ಥ_ಥ)-CSDN博客 所属专栏: Python 目录 字符串的常见操作 格式化字符串 占位符 f-string 字符串的 format 方法 字符串的编码与解码 与数据验证相关的方法 …...
【数字花园】个人知识库网站搭建:⑤本地构建+云服务器部署数字花园plus
目录 写在前面:数字花园的定义[[数字花园]]网站的构建原理包括三个步骤:[[我的数字花园搭建笔记]] 现在的部署流程一、本地操作详细教程-2.前置步骤(前面的文章都提过)-1.创建github中转库0. 本地环境配置基础环境:git…...
力扣题目 - 3264.K 次乘运算后的最终数组I
题目 还需要你前往力扣官网查看详细的题目要求 地址 1.给你一个整数数组 nums ,一个整数 k 和一个整数 multiplier 。2.你需要对 nums 执行 k 次操作,每次操作中:找到 nums 中的 最小 值 x ,如果存在多个最小值,选择最…...
Java常用 Date 时间格式化、Calender日历、正则表达式的用法
目录 1. SimpleDateFormat 日期格式化类 1.1 Date 类型转 String 1.2 String 类型转 Date 2. Calendar 日历类 3. 正则表达式 3.1 正则表达式的组成部分 3.2 手机号正则表达式 3.3 常用密码校验正则表达式 1. SimpleDateFormat 日期格式化类 SimpleDateFormat 是Java中…...
网页爬虫技术全解析:从基础到实战
引言 在当今信息爆炸的时代,互联网上的数据量每天都在以惊人的速度增长。网页爬虫(Web Scraping),作为数据采集的重要手段之一,已经成为数据科学家、研究人员和开发者不可或缺的工具。本文将全面解析网页爬虫技术&…...
细说STM32F407单片机SPI基础知识
目录 一、 SPI接口和通信协议 1、 SPI硬件接口 (1)MOSI(Master Output Slave Input) (2)MISO(Master Input Slave Output) (3)SCK 2、SPI传输协议 (1)CPHA0时的数据传输时序 …...
【OJ题解】面试题三步问题
个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 📘 基础数据结构【C语言】 💻 C语言编程技巧【C】 🚀 进阶C【OJ题解】 📝 题解精讲 目录 **题目链接****解题思路****1. 问题分析****2. 递归思路****3. 优化方案&a…...
Linux vi/vim 编辑器使用教程
Linux vi/vim 编辑器使用教程 引言 Linux 系统中的 vi 和 vim 是非常强大的文本编辑器,它们以其高效性和灵活性而闻名。vim 是 vi 的增强版,提供了更多的功能和改进的用户界面。本文将详细介绍 vi/vim 的基本用法,包括打开文件、编辑文本、…...
长安大学《2024年812自动控制原理真题》 (完整版)
本文内容,全部选自自动化考研联盟的:《长安大学812自控考研资料》的真题篇。后续会持续更新更多学校,更多年份的真题,记得关注哦~ 目录 2024年真题 Part1:2024年完整版真题 2024年真题...
服务器一般装什么系统?
在服务器管理中,操作系统的选择是一个关键因素,它直接影响到服务器的稳定性、性能和可维护性。那么为什么有些服务器选择Linux,而不是Windows?选择合适的操作系统对服务器的性能和安全性有多么重要? 在众多操作系统中…...
Gitlab ci/cd 从0-1持续集成持续发布前端
关于gitlab ci/cd,就是实现DevOps的能力,即Development &Operations的缩写,也就是开发&运维。CI/CD 指的是软件开发的持续集成方法,我们可以持续构建、测试和部署软件。通过持续方法的迭代能使得我们减少在错误代码或者错…...
#GC4049. GC.2017---. GC.2016.六年级
这套题包含了历年真题,包含了前面我写的博客中的题目,十分重要!!!!要考试的同学可以参考一下!! 此套题限时3小时。 #GC4049. GC.2017.六年级.01.更多闰年 题目描述 在 smoj 网站上…...
UE5中实现Billboard公告板渲染
公告板(Billboard)通常指永远面向摄像机的面片,游戏中许多技术都基于公告板,例如提示拾取图标、敌人血槽信息等,本文将使用UE5和材质节点制作一个公告板。 Gif效果: 网格效果: 1.思路 通过…...
Android系统(android app和系统架构)
文章目录 AndroidAndroid Apps四大组件 Android系统Platform API之下:一个微笑内核adb(Android Debug Bridge) Android包管理机制Android的Intent机制参考 Android LinuxFrameworkJVM 在Linux/Java上做了个二次开发?并不完全是:Android定义…...
docker设置容器自动启动
说起开机自动启动应该很多人都遇到过,我们公司做的系统很多的中间件都没有设置开机自动启动然后中间修改问题又设置了一些临时生效的文件,开始的时候大家都不以为意,知道公司陆续有人离职入职管理交接一塌糊涂,项目成了历史遗留问…...
在 React 中,创建和嵌套组件、添加标签和样式、显示数据、渲染条件和列表、对事件做出响应并更新界面以及在组件间共享数据是常见的任务
文章目录 1. 创建和嵌套组件创建组件嵌套组件 2. 添加标签和样式添加标签添加样式 3. 显示数据显示静态数据显示动态数据 4. 渲染条件和列表条件渲染列表渲染 5. 对事件做出响应并更新界面处理事件 6. 在组件间共享数据使用 Context API react 如何创建和嵌套组件 如何添加标签…...
Android命令行工具--dumpsys
dumpsys 是一种在 Android 设备上运行的工具,可提供有关系统服务的信息。可以使用 Android 调试桥 (adb) 从命令行调用 dumpsys,获取在连接的设备上运行的所有系统服务的诊断输出。 此输出通常比您想要的更详细,因此请使用此页面上的命令行选…...
设计模式-访问者模式
背景 做一个对歌手的评价系统,观众分为男人和女人,分别对歌手做出自己的评价。 传统思路: 做一个person父类,Man 和 Woman分别继承自这个父类,在这两个类中执行各自操作。 问题: 可拓展性差࿰…...
Vue集成阿里云点播实现视频上传
实现方式有多种,如下是我的实现方式: 一、下载点播插件,在 public 下的 index.html 中引入阿里云点播需要的 js 插件,js 文件最好放在 cdn 上,,这里以放在 public 文件夹下的 static 文件夹中为例: <s…...
ByteByteGo-Forward/Reverse Proxy正/反向代理
原文链接 EP137: Proxy Vs Reverse proxy - ByteByteGo Newsletter 参考链接 Forward proxy vs. reverse proxy: Whats the difference? | TheServerSide 正向代理 (Forward Proxy) 位置:用户设备 和 互联网 之间 用途:保护客…...
[论文阅读] |智能体长期记忆与反思
写在前面:10月份的时候,联发科天玑9400发布,搭载这款旗舰 5G 智能体 AI 芯片的荣耀MagicOS9.0实现了一句话让手机自动操作美团点咖啡。很快商场实体店里便能看到很多品牌手机已经升级为智能体语音助手。下一步,这些智能体或许便能…...
Elasticsearch Kibana (windows版本) 安装和启动
目录 1.安装 2.启动 elasticsearch 3.启动 kibana 1.安装 elasticsearch下载,官网链接: Download Elasticsearch | Elastichttps://www.elastic.co/downloads/elasticsearch kibana下载,官网链接: Download Kibana Free | G…...
CSS系列(9)-- Transform 变换详解
前端技术探索系列:CSS Transform 变换详解 🔄 致读者:探索 CSS 变换的魔力 👋 前端开发者们, 今天我们将深入探讨 CSS Transform,学习如何创建引人注目的 2D 和 3D 变换效果。 2D 变换基础 Ὠ…...
bs4基本运用
1. bs4基本使用 1.1. 简介 bs4的全称为 BeautifulSoup。和lxml一样,是一个html的解析器,主要功能也是解析数据和提取数据 。 本模块作为了解模块,实际开发中很少用这个模块去解析数据,大家可能会想为什么这个模块会逐渐被淘汰&…...
skywalking 搭建 备忘录
基础环境 apache-skywalking-apm-9.6.0.tar.gz apache-skywalking-java-agent-9.1.0.tgz elasticsearch 7.14.1 采用dockers搭建 或者手动部署 kibana 可视化 应用 微服务版 consumer.jar eureka.jar 注册中心 provider.jar skywalking 地址 https://skywalkin…...
C# 和 go 关于can通信得 整理
在C#中开发CAN(Controller Area Network)通信接口时,确实有一些现成的NuGet包可以简化你的开发工作。这些库通常提供了与CAN硬件接口通信所需的基本功能,如发送和接收CAN消息。下面是一些常用的NuGet包: PCANBasic.NET…...
Unity类银河战士恶魔城学习总结(P179 Enemy Archer 弓箭手)
教程源地址:https://www.udemy.com/course/2d-rpg-alexdev/ 本章节实现了敌人弓箭手的制作 Enemy_Archer.cs 核心功能 状态机管理敌人的行为 定义了多个状态对象(如 idleState、moveState、attackState 等),通过状态机管理敌人的…...
一、LRU缓存
LRU缓存 1.LRU缓存介绍2.LRU缓存实现3.LRU缓存总结3.1 LRU 缓存的应用3.2 LRU 缓存的优缺点 1.LRU缓存介绍 LRU是Least Recently Used 的缩写,意为“最近最少使用”。它是一种常见的缓存淘汰策略,用于在缓存容量有限时,决定哪些数据需要被删…...
基于python绘制数据表(上)
利用python绘制各种数据图表 绘制柱形图-源码 from openpyxl import Workbook from openpyxl.chart import BarChart, Reference# 创建工作薄 wb Workbook(write_onlyTrue) # 创建工作表 ws wb.create_sheet(月收入)# 准备数据 rows [(月份, 销售额),(1, 23),(2, 43),(3, …...
Python Segmentation fault错误定位办法
1. 说明 Python3执行某一个程序时,报Segmentation fault (core dumped)错,但没有告知到底哪里出错,无法查问题,这时就需要一个库faulthandler来帮助分析。 2. 安装faulthandler faulthandler在Python3.3之后成为标准库…...
快速在远程服务器执行命令、批量在多个服务器执行命令(基于sshpass的自定义脚本fastsh)
在日常服务器操作中,很多时候我们需要同时操作多个服务器。特别对于那些每个服务器都需要操作相同命令的场景,不断的切换命令会话窗口会比较麻烦。基于此,编写了本文中的 fastsh 脚本用于轻度解决这种问题,提高一定的便利性。 使…...
Java基于SpringBoot的企业OA管理系统,附源码
博主介绍:✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&…...
SSM 垃圾分类系统——环保领域的创新引擎
第1章 概述 1.1 研究背景 随着现代网络技术发展,对于垃圾分类系统现在正处于网络发展的阶段,所以对它的要求也是比较严格的,要从这个系统的功能和用户实际需求来进行对系统制定开发的发展方式,依靠网络技术的的快速发展和现代通讯…...
websocker的java集成过程
第一步:引入依赖包 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dependency> 第二步设置配置类: // 需要注入Bean的话必须声明为配置类 Co…...
如何对小型固定翼无人机进行最优的路径跟随控制?
控制架构 文章继续采用的是 ULTRA-Extra无人机,相关参数如下: 这里用于guidance law的无人机运动学模型为: { x ˙ p V a cos γ cos χ V w cos γ w cos χ w y ˙ p V a cos γ sin χ V w cos γ w sin χ…...
03、对象的内存布局以及分配方式
在通过前面的文章了解到当一个程序启动的时候,会把一个java文件通过编译成class文件,然后把class字节码加载到JVM内存中,并初始化各种变量和对象实例,同时建立起具体的内存模型进行线程间的数据交换,在这之间对象的实例…...
「Mac玩转仓颉内测版50」小学奥数篇13 - 动态规划入门
本篇将通过 Python 和 Cangjie 双语介绍动态规划的基本概念,并解决一个经典问题:斐波那契数列。学生将学习如何使用动态规划优化递归计算,并掌握编程中的重要算法思想。 关键词 小学奥数Python Cangjie动态规划斐波那契数列 一、题目描述 …...
ADB在浏览器中:ya-webadb项目安装与配置完全指南
ADB在浏览器中:ya-webadb项目安装与配置完全指南 ya-webadb ADB in your browser [这里是图片001] 项目地址: https://gitcode.com/gh_mirrors/ya/ya-webadb 项目基础介绍与编程语言 ya-webadb 是一个由 Yume-chan 开发的开源项目,它实现了ADB&#x…...
通过ros2启动gazebo
ros2_integration3.使用gazebo加载URDF 在老版本中,我们使用 gazebo --verbose -s libgazebo_ros_init.so -s libgazebo_ros_factory.so来启动gazebo和ros2与gazebo的桥。 但在新版本中,libazebo_ros_init.so和libazebo_ros_factory.so不再被支持 你…...
WPF 消息循环(二)
们已经知道,win32/MFC/WinForm/WPF 都依靠消息循环驱动,让程序跑起来。 这里就介绍 WPF 中是如何使用消息循环来驱动程序的。 1. 背景 只听说过 Dispatcher ,哪里来的消息循环? WPF 启动运行堆栈: > WpfApp1.…...
基于stm32的红外测温系统设计(论文+源码)
1总体方案设计 本课题为基于STM32的红外测温系统设计,在此将系统架构设计如图3.1所示, 整个系统包括STM32F103单片机,红外测温模块MLX90614,显示模块OLED12864,蜂鸣器以及按键等构成,在功能上,…...
分布式 Paxos算法 总结
前言 相关系列 《分布式 & 目录》《分布式 & Paxos算法 & 总结》《分布式 & Paxos算法 & 问题》 参考文献 《图解超难理解的 Paxos 算法(含伪代码)》《【超详细】分布式一致性协议 - Paxos》 Basic-Paxos 基础帕克索斯算法…...
ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小
ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小 文章目录 ubuntu 使用 Times New Roman 字体在 Matplotlib 中绘图并调整字体大小1. 安装 Times New Roman 字体验证字体是否安装成功 2. 在 Matplotlib 中加载 Times New Roman 字体3. 在 Matplotlib 中使…...
[网络] UDP协议16位校验和
16位校验和是udp报头中的一个字段,绝大多数的教材和网课都会忽略这个字段,不去细究,我闲的蛋疼问了问ai,得到了一个答案,故作此文,以证明我爱学习之心惊天地泣鬼神(狗头 ai的回答 仅从作用来说,它会根据整个应用层报文进行运算,生成一个准确的数字,这个数字不能保证唯一性,但根…...
【总结·反思·汇报·思考02】裸辞后,我的一些感想和感悟。
Hello,大家好! 首先,我需要向大家道个歉,对不起!因为最近发生了一些事情,博客文章一直没有更新。(90度鞠躬道歉) 那么,最近到底发生了什么呢?相信大家已经从…...
【前端开发】HTML+CSS网页,可以拿来当作业(免费开源)
HTML代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content_lizhongyu"widthdevice-width, initial-scale1.0"><title>小兔鲜儿-新鲜、惠民、快捷<…...
java 导出word锁定且部分内容解锁可编辑
使用 Apache POI 创建带编辑限制的 Word 文档 在日常工作中,我们可能需要生成一些带有编辑限制的 Word 文档,例如某些段落只能被查看,而其他段落可以自由编辑。本文介绍如何使用 Apache POI 创建这样的文档,并通过代码实现相应的…...
Scala的隐式类
package hfd //隐式类 //任务:给之前的BaseUser添加新的功能,但是不要直接去改代码 //思路:把BaseUser通过隐式转换,改成一个新类型,而这个新类型中有这新的方法 //implicit class一个隐式转换函数类 //作用࿱…...
Jenkins流水线初体验(六)
DevOps之安装和配置 Jenkins (一) DevOps 之 CI/CD入门操作 (二) Sonar Qube介绍和安装(三) Harbor镜像仓库介绍&安装 (四) Jenkins容器使用宿主机Docker(五) Jenkins流水线初体验(六) 一、Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目,每个步骤…...
RK3568(二)——字符设备驱动开发
最基础的字符设备驱动开始,重点学习 Linux 下字符设备驱动开发框架。 驱动框架 Linux 应用程序对驱动程序的调用: 在 Linux 中一切皆为文件,驱动加载成功以后会在“/dev”目录下生成一个相应的文件,应用程序通过对这个名为“/de…...