零基础学习Python(七)

1. 字符串常用方法

lower()、upper():转换为小写字符串、大写字符串

split(str):按照指定字符串str进行分割,结果为列表:

email = "123@qq.com"
print(email.split("@"))
['123', 'qq.com']

count(str):统计str字符串出现的次数:

s = "hello"
print(s.count("o"))
1

find(str):查找str字符串首次出现的位置,如果没有,则为-1:

s = "hello"
print(s.find("l"))
print(s.find("p"))
2
-1

index(str):与find类似,区别在于如果字符串没有找到,则报错

startswith(str)、endswith(str):是否以str开头、是否以str结尾

replace(old, new):使用new字符串替换所有的old字符串:

print("hello".replace("o", "p"))
hellp

center(width, fillchar):在指定的宽度范围内居中,并可以使用fillchar进行填充:

print("HelloWorld".center(20))

print("HelloWorld".center(20, "*"))

join(iter):将可迭代对象iter每个元素通过该字符串相连:

print(".".join("hello"))
h.e.l.l.o

strip(chars):去掉左侧和右侧的chars中包含的字符,chars不穿则默认去除空格:

print("    Hello  World    ".strip())
Hello  World
print("ld-HelloWorld".strip("dl"))
-HelloWor

lstrip(chars)、rstrip(chars):去掉左侧的chars中包含的字符、去掉右侧的chars中包含的字符

2. 格式化字符串的三种方式

占位符方式:

name = "马冬梅"
age = 18
score = 98.5
print('姓名:%s,年龄:%d,分数:%.1f' % (name, age, score))
姓名:马冬梅,年龄:18,分数:98.5

f-string方式(Python 3.6之后的方式):

print(f'姓名:{name}, 年龄: {age}, 分数: {score}')
姓名:马冬梅,年龄:18,分数:98.5

format方式:

print('姓名:{0}, 年龄: {1}, 分数: {2}'.format(name, age, score))
姓名:马冬梅,年龄:18,分数:98.5

format方式中的大括号中的0/1/2是format参数对应的索引位置,实际上也可以这样写: 

print('姓名:{2}, 年龄: {0}, 分数: {1}'.format(age, score, name))

 3. 字符串的编码与解码

 字符串的编码与解码本质上是字符串与字节类型的转换。编码使用encode方法(默认编码方式是utf-8),解码使用decode方法:

s = "伟大的中国梦"
code = s.encode("utf-8")
print(code)
print(code.decode("utf-8"))

4. 字符串的验证

isdigit():所有字符是否都是数字,必须为阿拉伯数字

isnumeric(): 所有字符是否都是数字,可以为阿拉伯数字、罗马数字、中文数字

isalpha():所有字符是否都是字母,包括中文字符

islower():所有字符是否都是小写

isupper():所有字符是否都是大写

istitle():是否单词是否首字母大写

print("一二三".isnumeric())
print("壹贰叁".isnumeric())
print("中文和English".isalpha())
print("Hello World".istitle())
print("Hello world".istitle())
True
True
True
True
False

 5. 正则表达式

re.match函数从字符串的起始位置开始匹配,如果匹配成功,结果为Match对象,否则为None

import re
pattern = '\d+\.\d+'  #匹配一个或多个数字.一个或多个数字
print(re.match(pattern, '3.11'))
print(re.match(pattern, 'd3.11'))
<re.Match object; span=(0, 4), match='3.11'>
None

继续查看match对象的详细属性: 

m = re.match(pattern, '3.11')
print("匹配的起始位置", m.start())
print("匹配的结束位置", m.end())
print("匹配的区间", m.span())
print("匹配的数据", m.group())
匹配的起始位置 0
匹配的结束位置 4
匹配的区间 (0, 4)
匹配的数据 3.11

re.search函数搜索整个字符串匹配,只匹配第一个,如果匹配成功,结果为Match对象,否则为None

import re
pattern = '\d+\.\d+'  #匹配一个或多个数字.一个或多个数字
print(re.search(pattern, 'def3.11 & 2.7'))
<re.Match object; span=(3, 7), match='3.11'>

re.findall函数搜索整个字符串匹配,匹配所有,返回一个列表,如果没匹配,就是一个空列表(不是None)

print(re.findall(pattern, 'def3.11 & 2.7'))
['3.11', '2.7']

re.sub函数用于实现字符串中指定子串的替换

import re
pattern = '\d+\.\d+'  #匹配一个或多个数字.一个或多个数字
print(re.sub(pattern, '*', 'def3.11 & 2.7'))
def* & *

 re.split函数用于按照指定字符串来分割原始字符串

import re
pattern = '\d+\.\d+'  #匹配一个或多个数字.一个或多个数字
print(re.split(pattern, 'def3.11 & 2.7'))
['def', ' & ', '']

6. 习题

1个英文字符是1个字符,1个中文字符也是1个字符,只不过1个英文字符是1个字节,utf-8编码下,1个中文字符是3个字节,gbk编码下,1个中文字符是2个字节。

7. 内置函数

divmod:获取商和余数

x, y = divmod(13, 5)
print(x, y)
2 3

sorted:对可迭代对象进行排序,返回一个新的对象,不改变原对象中的元素顺序:

l = [3, 1, 44, 23]
print(sorted(l))
[1, 3, 23, 44]

reversed:反转序列

l = [3, 1, 44, 23]
print(list(reversed(l)))
[23, 44, 1, 3]

all:判断迭代器中所有元素的布尔值是否都为True

l1 = [3, 1, 44, 23, {}]
l2 = [3, 1, 44, 23, {2}]
print(all(l1))
print(all(l2))
False
True

any:判断迭代器中是否有元素的布尔值为True

l1 = [3, 1, 44, 23, {}]
l2 = [{}, (), False]
print(any(l1))
print(any(l2))
True
False

filter:通过指定条件过滤迭代器元素

l = [1, 2, 3, 4]
print(list(filter(lambda x: x % 2 == 0, l)))
[2, 4]

map:通过指定函数映射迭代器元素

l = [1, 2, 3, 4]
print(list(map(lambda x: x * 2, l)))
[2, 4, 6, 8]

8. 类和对象的特殊属性和方法

class A:passclass B:passclass C(A, B):def __init__(self, name, age):self.name = nameself.age = agea = A()
b = B()
c = C("zhangsan", 20)print("a的属性字典", a.__dict__)
print("b的属性字典", b.__dict__)
print("c的属性字典", c.__dict__)
a的属性字典 {}
b的属性字典 {}
c的属性字典 {'name': 'zhangsan', 'age': 20}
print("a所属的类", a.__class__)
print("b所属的类", b.__class__)
print("c所属的类", c.__class__)
a所属的类 <class '__main__.A'>
b所属的类 <class '__main__.B'>
c所属的类 <class '__main__.C'>
print("A的父类元祖", A.__bases__)
print("B的父类元祖", B.__bases__)
print("C的父类元祖", C.__bases__)
print("A的父类", A.__base__)
print("B的父类", B.__base__)
print("C的父类", C.__base__)
A的父类元祖 (<class 'object'>,)
B的父类元祖 (<class 'object'>,)
C的父类元祖 (<class '__main__.A'>, <class '__main__.B'>)
A的父类 <class 'object'>
B的父类 <class 'object'>
C的父类 <class '__main__.A'>
print("A类的层次结构", A.__mro__)
print("B类的层次结构", B.__mro__)
print("C类的层次结构", C.__mro__)
A类的层次结构 (<class '__main__.A'>, <class 'object'>)
B类的层次结构 (<class '__main__.B'>, <class 'object'>)
C类的层次结构 (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
print("A类的子类", A.__subclasses__())
print("B类的子类", B.__subclasses__())
print("C类的子类", C.__subclasses__())
A类的子类 [<class '__main__.C'>]
B类的子类 [<class '__main__.C'>]
C类的子类 []

注意,__subclasses__()是一个方法,不是属性

9. 对象的浅拷贝与深拷贝

浅拷贝:拷贝出来的对象的属性与原对象是一个地址空间的

深拷贝:拷贝出来的对象的属性与原对象不是一个地址空间的

b = B()
bcopy = copy.copy(b)  #浅拷贝
bdeepcopy = copy.deepcopy(b)   #深拷贝

 10. random模块的简单使用

seed函数时生成随机数种子,如果不传参,则默认取当前系统时间,如果随机数种子相同,那么生成的随机数也相同。 

random.seed(10)
print(random.random())
print(random.randint(1, 10))

多次执行random.random和random.randint函数,发现结果一样:

0.5714025946899135
7

randrange用于产生m与n之间的步长为k的随机数:

print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
print(random.randrange(1, 10, 3))
7
7
7
4
7
1

choice函数用于从序列中随机选取一个数:

print(random.choice(range(1, 10)))
print(random.choice(range(1, 10)))
print(random.choice(range(1, 10)))
print(random.choice(range(1, 10)))
print(random.choice(range(1, 10)))
7
4
2
3
7

shuffle函数用于随机打乱序列的顺序:

li = [1, 2, 3, 4, 5, 6]
random.shuffle(li)
print(li)
[5, 6, 1, 2, 4, 3]

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

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

相关文章

Linux 安装Mysql保姆级教程

一、检查环境 我们登录服务器&#xff0c;查看之前是否安装过mysql rpm -qa | grep mysql 由于我之前安装过&#xff0c;所以这里是有数据的 如果需要删除重新下载&#xff0c;可以使用 rpm -e mysql57-community-release-el7-10.noarch.rpm 二、安装 1、下载 接下来下载安装…

Hive SQL

一、基本数据类型 tinyint 1byte 有符号整数 smallint 2byte 有符号整数 int 4byte 有符号整数 bigint 8byte 有符号整数 boolean 布尔类型&#xff0c;true或者false float 单精度浮点数 double 双精度浮点数 decim…

电脑C盘临时文件怎么清理?

在解决“C盘临时文件怎么清理&#xff1f;”的问题前&#xff0c;先来一起了解一下清理C盘临时文件的原因&#xff1a; 释放磁盘空间&#xff1a;临时文件可以占用大量磁盘空间&#xff0c;尤其是在长时间未清理的情况下&#xff0c;清理这些文件可以释放空间。提高系统性能&a…

sheng的学习笔记-AI-半监督聚类

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 半监督学习&#xff1a;sheng的学习笔记-AI-半监督学习-CSDN博客 聚类&#xff1a;sheng的学习笔记-AI-聚类(Clustering)-CSDN博客 均值算法&#xff1a;sheng的学习笔记-AI-K均值算法_k均值算法怎么算迭代两次后的最大…

突发!Runway 从 HuggingFace 及 GitHub 上删库跑路,背后有何隐情?

突发&#xff01;2024年8月29日Runway 从 HuggingFace 及 GitHub 上删库跑路&#xff0c;背后有何隐情&#xff1f; &#x1f9d0; 今天我们来聊一聊科技圈一则爆炸性消息&#xff1a;Runway ML 从 HuggingFace 和 GitHub 上删库跑路&#xff0c;毫无预警&#xff01;这个举动…

properties文件提示未引用

问题描述 以前用的好好的项目,今天突然打开就发现idea不识别spring配置信息显示未引用,如果config代码中引入的配置却可以高亮显示,然后输入spring相关的配置,文件是没有提示的。经过研究发现是spring相关的插件被关闭了。效果如下 解决方法 启用三个插件spring Boot,Sp…

看完这100道软件测试面试题,拿不到offer,算我输

掌握此套面试题&#xff0c;人手至少2份offer&#xff0c;绝不瞎吹&#xff01;分享给大家。 一、自我介绍 二、灵活问题 1、大概说说之前公司的测试流程 2、测试报告有哪些内容? 3、如何保证用例的覆盖度&#xff1f; 4、什么是测试用例&#xff0c;什么是测试脚本&…

知识社区的小程序源码系统 界面支持万能DIY装修 带源代码包以及搭建部署教程

系统概述 知识社区的小程序源码系统是一款专为构建知识分享和交流社区而设计的强大工具。它提供了完整的源代码包&#xff0c;使开发者能够根据自己的需求进行定制和扩展&#xff0c;打造出个性化的小程序应用。 该系统的界面设计简洁大方&#xff0c;易于操作&#xff0c;同…

【JavaEE】线程安全性问题,线程不安全是怎么产生的,该如何应对

产生线程不安全的原因 在Java多线程编程中&#xff0c;线程不安全通常是由于多个线程同时访问共享资源而引发的竞争条件。以下是一些导致线程不安全的常见原因&#xff1a; 共享可变状态&#xff1a;当多个线程对共享的可变数据进行读写时&#xff0c;如果没有适当的同步机制&…

鸿蒙Next 单元测试框架——hypium

一 框架概述 单元测试框架(hypium)是HarmonyOS上的测试框架&#xff0c;提供测试用例编写、执行、结果显示能力&#xff0c;用于测试系统或应用接口。 表1 单元测试框架功能特性 二 安装使用 目前hypium以npm包的形式发布, 因此需要在Deveco Studio 工程级package.json内配…

CSS-常用属性【看这一篇就够了】

目录 前言文章 常用属性 cursor鼠标样式 outline外轮廓 border与outline的区别 overflow超出部分隐藏 overflow属性值 overflow-x和overflow-y vertical-align属性 应用案例 常用的a标签布局按钮 水平居中的轮播图按钮 产品展示效果&#xff1a; 小米商城菜单 前…

【C#】属性的声明

在面向对象程序设计中,属性是访问对象存储数据的首选方式。 一般不要直接公开类的变量成员,即便是get访问器和set访问器并无数据访问规则。 属性的声明 1. 完整声明 在代码中输入propfull &#xff0c;并连续按两下tab键 高亮的部分是可以修改的部分&#xff0c;按tab键可以…

FPGA上板项目(四)——FIFO测试

目录 实验内容实验原理FIFO IP 核时序绘制HDL 代码仿真综合实现上板测试 实验内容 理解 FIFO 原理调用 FIFO IP 核完成数据读写 实验原理 FIFO&#xff1a;First In First Out&#xff0c;先入先出式数据缓冲器&#xff0c;用来实现数据先入先出的读写方式。可分类为同步 FI…

一个php快速项目搭建框架源码,带一键CURD等功能

介绍&#xff1a; 框架易于功能扩展&#xff0c;代码维护&#xff0c;方便二次开发&#xff0c;帮助开发者简单高效降低二次开发成本&#xff0c;满足专注业务深度开发的需求。 百度网盘下载 图片&#xff1a;

科研绘图系列:R语言多组极坐标图(grouped polar plot)

介绍 Polar plot(极坐标图)是一种二维图表,它使用极坐标系统来表示数据,而不是像笛卡尔坐标系(直角坐标系)那样使用x和y坐标。在极坐标图中,每个数据点由一个角度(极角)和一个半径(极径)来确定。角度通常从水平线(或图表的某个固定参考方向)开始测量,而半径则是…

【网络安全】服务基础第一阶段——第六节:Windows系统管理基础---- DNS部署与安全

计算机智能识别并用IP地址定位&#xff0c;例如我们想要访问一个网页&#xff0c;其实是只能使用这个网页的IP地址&#xff0c;即四位的0&#xff5e;255来访问&#xff0c;但这一串数字难以记忆&#xff0c;于是就有了DNS&#xff0c;将难以记忆的数字转化为容易记忆的域名&am…

合宙LuatOS产品规格书——Air700EAQ

Luat Air700EAQ是合宙的LTE Cat.1bis通信模块&#xff0c;采用移芯EC716E平台&#xff0c;支持LTE 3GPP Rel.13技术。 该模块专为满足小型化、低成本需求而设计&#xff0c;具备超小封装和极致成本优势。 Air700EAQ支持移动双模&#xff0c;内置丰富的网络协议&#xff0c;集…

基于AI大模型开发上层应用常见的技术栈

基于AI大模型的上层应用开发&#xff0c;技术栈要求通常包括以下几个方面&#xff1a; 编程语言&#xff1a;Python是AI领域的主要编程语言&#xff0c;具有大量的库和框架支持&#xff0c;是大模型开发的首选语言 。TypeScript也是不错的选择&#xff0c;很多模型对外提供类似…

Java使用POI创建带样式和公式的Excel文件

这篇文章将演示如何使用POI 创建带样式和公式的Excel文件。 代码 import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream; import java.io.IOException;public class ExcelDemo {public static void mai…

FPGA第 5 篇,FPGA技术优略势,FPGA学习方向,FPGA学习路线(FPGA专业知识的学习方向,FPGA现场可编程门阵列学习路线和方向)

前言 前几篇讲了一下FPGA的发展和应用&#xff0c;以及未来前景。具体详细&#xff0c;请看 FPGA发展和应用&#xff0c;以及未来前景https://blog.csdn.net/weixin_65793170/category_12665249.html 这里我们来&#xff0c;记录一下&#xff0c;FPGA专业知识的学习路线 一.…