个人主页:我是弓长
系列专栏:编程语言_Python
相关文章:
- 从零开始学Python_(一)Python简介(包含Python的起源、发展、特点、应用)
- 从零开始学Python_(二)Python基础知识(包含代码编写规范、变量、基本的输入输出、模块)
一个普通的学习者
目录
一、数字类型
数字类型是指表示数字或者数值的数据类型
1.1整型
整型(int)存储的数据为整数
按照进制划分:
- 二进制整数:只有0和1两个基数,进位规则是“逢二进一”。Python种用二进制表示整数需要在数字前面加上0b或0B
- 八进制整数:由0~7组成,进位规则是“逢八进一”。Python中用八进制表示整数需要在数字前面加上0o或0O
- 十进制整数
- 十六进制整数:由0~9和A~F组成,进位规则是“逢十六进一”。Python中用十六进制表示整数需要在数字前面加上0x或0X
例:分别用二进制、八进制、十进制、十六进制表示整数20
a = 0b10010 # 二进制
print("a =", a)
b = 0o22 # 八进制
print("b =", b)
c = 18 # 十进制
print("c =", c)
d = 0x12 # 十六进制
print("d =", d)
1.2浮点型
浮点型(float)存储的数据是实数
Python中浮点型必须有小数部分,小数部分可以为0
书写格式:
- 十进制格式:
f1 = 3.14
- 科学计数格式:E或e代表基数是10,其后的数字代表指数
f2 = 3.14e-2 # 等价于0.0314 f3 = 3.14e4 # 等价于31400.0
Python中浮点型的取值范围为-1.8e08~1.8e08。超出这个范围Python会视其为无穷大(inf)或无穷小(-inf)
浮点型最长可以输出16个数字,浮点型进行运算后,最长可输入17个数字
但是计算机系统只能提供15个数字的准确性,最后一位由计算机系统根据二进制计算结果确定,存在一定的误差
1.3复数型
复数由实部和虚部构成。如3+2j,其中3是实部,2j是虚部
获取复数的实部和虚部:
a = 3.5 + 1.5j # 复数型变量
print(a.real) # 打印a的实部
print(a.imag) # 打印a的虚部
还可以通过内置函数complex(real, imag)传入实部和虚部定义复数。如果没有传入虚部则默认为0j
例:complex()函数的使用
a = complex(1.5, 2) # 传入实部1.5,虚部2
print(a)
b = complex(3) # 传入实部3,没有传入虚部则默认为0j
print(b)
1.4布尔型
布尔型主要用来表示真或假,只有True和False两种值,分别对应1和0
布尔型得知也可以进行计算,如“False + 1”的结果为1,但是不建议对布尔值进行数值运算
Python中任何的对象都具有布尔属性,一般元素的布尔值都是True
布尔值是False的情况:None、False(布尔值)、0(浮点型0)、0.0 + 0.0j(复数型0)、""(空字符串)、[ ](空列表)、( )(空元组)、{ }(空字典)
二、数字类型的操作
2.1数字运算符
数字运算符是一些特殊的符号,用于数字之间的运算
分类:
算术运算符:都是双目运算符,用于对两个数据进行相应的运算。如:操作数a = 3,b = 5
运算符 | 说明 | 形式 | 结果 |
---|---|---|---|
+ | 加:两个数据相加求和 | a + b | 8 |
- | 减:两个数据相减求差 | a - b | -2 |
* | 乘:两个数据相乘求积 | a * b | 15 |
/ | 除:两个数据相除求商 | a / b | 0.6 |
% | 取余:两个数据相除求余数 | a % b | 3 |
** | 幂:两个数据进行幂运算,获得a的b次方 | a ** b | 243 |
// | 取整除:两个数据相除,获得商的整数部分 | a // b | 0 |
- 赋值运算符:将基本赋值运算符“=”右边的值赋给左边的变量,也可以进行某些运算后再赋值给左边的变量,如:
a = 3 b = a * 2 # b = 6
可以为多个变量赋相同的值,如:
a = b = "python"
其等价于:
a = "python" b = "python"
为多个变量赋不同的值,可简写为:
a, b, x, d = 10, 2.2, 1 + 2j, True
- 复合赋值运算符: 结果一列仅表示a的值,b值无变化。如:操作数a = 3,b = 5
运算符 说明 形式 结果 += 加等于:左值加右值的和赋给左边的变量 a += b等价于a = a + b 8 -= 减等于:左值减右值的差赋给左边的变量 a -= b等价于a = a -b -2 *= 乘等于:左值乘右值的积赋给左边的变量 a *= b等价于a = a * b 15 /= 除等于:左值除以右值的商赋给左边的变量 a /= b等价于a = a / b 0.6 %= 余等于:左值除以右值的余数赋给左边的变量 a %= b等价于a = a % b 3 **= 幂等于:左值的右值次方赋给左边的变量 a **= b等价于a = a ** b 243 //= 取整等于:左值除以右值的商的整数部分赋给左边的变量 a //= b等价于a = a // b 0
2.2数字类型转换
数字类型转换是数字从一种类型转换为另一种类型
Python内置了一系列可以强制转换数字类型的函数,将数字转换为指令类型
数字转换类型函数:
函数 | 说明 |
---|---|
int(x[ ,base = 10]) | 将浮点型、布尔型以及符合数字类型规范的字符串转换为整型,其中base代表进制 |
float(x) | 将整型和符合数字类型规范的字符串转换为浮点型 |
complex(real[, imag]) | 将实部通过实部和虚部组合为复数型,或将符合数字类型规范的字符串转换为复数型 |
bool(x) | 将任意类型转换为布尔型 |
三、字符串类型及其操作
字符串类型存储的数据是字符串,字符串是一个由字符构成的序列
Python字符串是不可变的,不支持动态修改
3.1字符串的定义方式
定义方式:单行字符串和多行字符串
单行字符串:由一对单引号或一对双引号包含,如:
"hello,world"
'hello,world'
单行字符串说明:
- 双引号定义的字符串可以含有单引号,但不能直接含有双引号
- 单引号定义的字符串可以含有双引号,但不能直接含有单引号
- 否则会使程序异常,异常类型表示为SyntaxError
- 要想解决这个问题,可以对字符串中的单引号、双引号等特殊字符进行转义处理
转义处理:在特殊字符前面加上转义字符“\”,解释器不再将特殊字符视为字符串的语法标志,而将其与转义字符视为一个整体
常用的转义字符及其含义:
转义字符 | 说明 | 转义字符 | 说明 |
---|---|---|---|
\(在行尾时) | 续行符 | \t | 横向制表符 |
\\ | 反斜杠符 | \b | 退格 |
\' | 单引号 | \r | 回车 |
\" | 双引号 | \f | 换页 |
\n | 回车换行 | \a | 响铃 |
如果需要忽略字符串中的转义字符,则可以在字符串的前面添加r或R,如:
print("C:\Windows\tracing") # 转义字符起作用
print(r"C:\Windows\tracing") # 忽视字符串中的转义字符
提醒:
- 字符串的定义可以选择单引号或双引号,建议编程中统一使用其中一种
- 一般情况下双引号在面对缩写和所有格时更加友好,无需变换引号形式或使用转义字符
- 如果字符串包含引号,应当优先使用另一种形式的引号来包含字符串,而非使用转义字符
多行字符串:
- 多行字符串由一对三引号包含,可以是三单引号也可以是三单引号
- 三引号中包含的所有字符都属于字符串内容,包括空格、换行等
- 三引号中可以包含单引号、双引号等,无需转义,所有字符均以原始形态打印出来
3.2字符串格式化
字符串格式化是指预先制定一个带有空位的模板,然后根据需要对空位填充
从Python2.6开始,字符串对象提供了format()方法
format()方法语法格式:
模板字符串.format(参数列表)
- 模板字符串中有一系列用“{ }”表示的空位,format()方法可以将以逗号间隔的参数列表按照对应关系替换到这些空位上
- 如果“{ }”中没有序号,则按照出现的顺序进行替换
- 如果“{ }”中指定了参数序号,则会按照序号对应参数进行替换,参数从0开始编号
format()方法的格式处理: format()方法的模板字符串的空位中不仅可以填写参数序号,还可以有其他的格式处理形式,空位样式:
{参数序号:格式处理内容}
格式处理内容按照以下顺序使用:
- 填充:填充单个字符,不指定时用空格填充
- 对齐:“<”为左对齐,“>”为右对齐,“^”为居中对齐
- 符号:“+”表示在正数前加正号,负数前加负号;“-”表示正数不变,负数加负号;空格表示正数加空格,负数加负号
- 宽度:指定空位所占宽度
- 分隔符:用逗号“,”分隔数字的千位,适用于整数和浮点数
- 精度:用“.precision”指定浮点数的精度或字符串输出的最大长度
- 类型:用于指定类型,如:
类型 说明 s 对字符串类型格式化 b 将整数输出为对应的二进制数 c 将整数输出为对应的Unicode字符
d 将整数输出为对应的十进制数 o 将整数输出为对应的八进制数 x或X 将整数输出为对应的小写或大写的十六进制数 e或E 将浮点数输出为e或E的指数形式 f 将浮点数标准输出 % 输出浮点数的百分比形式
例:
name = "张三"
studentId = "202201"
print("我叫{0:-^10},学号为{1:-^10}".format(name, studentId)) # 姓名和学号以-填充至10位
exercise = 300
3.3f字符串/f-strings
Python3.6提供了一种新的格式化字符串的方法——f-strings,即f字符串
f字符串的格式化处理和format()方法类似,但语法更简洁
Python3.6及以后的版本推荐使用f字符串进行字符串的格式化
f字符串用花括号“{}”表示被替换的字段
例:
name = "李四"
studentId = "202202"
print(f"我叫{name},学号为{studentId}")
例:
milk = "牛奶"
milk_sales = 100032894.37298
f_milk = f"商品{milk:*^10},销售额为{milk_sales:*^20,.2f}" # 商品以*填充至10位;销售额以*填充至20位,且保留两位小数
oil = "食用油"
oil_sales = 10048293984.4294
f_oil = f"商品{oil:*^10},销售额为{oil_sales:*^20,.2f}"
print(f_milk)
print(f_oil)
3.4字符串的索引与切片
索引说明:字符串是一个不可变的字符序列,每个字符都有编号/索引
- Python的索引从0开始递增,字符串的第1个字符的索引为0,第2个字符的索引为1,以此类推
- 索引也可以是负数,字符串的最后1个字符的索引为-1,倒数第2个字符的索引为-2,以此类推
- 根据索引可以获取字符串中的字符
例:输出"study hard"中的字符"a"
sentence = "study hard"
print(sentence[7]) # 正索引
print(sentence[-3]) # 负索引
len()函数:用于计算字符串的长度,语法格式:string为要进行长度计算的字符串
len(string)
说明 :
- len()函数在计算字符串长度时,不区分字母、汉字、数字、标点和特殊字符等
例:计算字符串"study hard"的长度
sentence = "study hard" # 字符串sentence
length = len(sentence) # 计算字符串sentence的长度,赋值给length
print(length) # 输出length
字符串切片: 指从字符串中截取部分字符组成新的字符串,且不会使原字符串产生变化,语法格式:
sname[start:end:step]
字符串切片参数:
参数 | 说明 |
---|---|
sname | 字符串名称 |
start | 切片开始的位置(包括此位置),不指定时默认为0 |
end | 切片结束的位置(不包括此位置),不指定时默认为序列的长度 |
step | 切片的步长,不传值时默认为1,最后的冒号也可以省略 |
例:字符串的切片
sname = "学习Python使我快乐" # 共12个字符
print("sname[:]:",sname[:]) # 取到字符串所有字符
print("sname[3:8]",sname[3:8]) # 默认步长为1
print("sname[:8]",sname[:8]) # 默认从索引0开始,步长为1
print("sname[3:]",sname[3:]) # 默认到字符串末尾,步长为1
print("sname[3:8:2]",sname[3:8:2]) # 设置步长为2
print("sname[:-4]",sname[:-4]) # 索引0到-4,不含-4
print("sname[-8:-3:2]",sname[-8:-3:2]) # 索引-8到-3,不含-3,步长为2
print("sname[8:3:-2]",sname[8:3:-2]) # 索引8到3,不含3,步长为-2
3.5字符串的拼接与重复
字符串拼接:使用“+”可以实现字符串拼接,将多个字符串连接起来并产生一个字符串对象
例:使用“+”实现字符串拼接
name = "张三"
action = "吃了早饭"
print(name + action)
例:字符串类型与整型拼接,程序异常,异常类型为TypeError
str1 = "我今天吃了"
num = 2
str2 = "碗饭"
print(str1 + num + str2)
str()函数和repr()函数是将对象转换为字符串类型的两种机制
str()函数会将对象转换为合理形式的字符串,以便用户理解
repr()函数会创建一个字符串,用合法的Python表达式来表达对象,以供Python解释器读取
例:str()函数和repr()函数的使用
action = "Hi,1000phone"
print("str()函数处理后:" + str(action))
print("repr()函数处理后:" + repr(action))
str1 = "我今天吃了"
num = 2
str2 = "碗饭"
print("用str()函数实现字符串拼接:" + str1 + str(num) + str2)
重复字符串:使用“*”可以将字符串重复多次
例:使用“*”重复字符串
print("study" * 5)
3.6字符串的成员归属
字符串的成员归属需要用到成员运算符
成员运算符能够判断指定序列是否包含某个值
Python的成员运算符:
- in:如果在指定序列中找到值,返回True,否则返回False
- not in:如果在指定序列中没有找到值,返回True,否则返回False
例:查找字符串是否含有某字符
sentence = "i want to eat meat"
print("e在sentence中:", "e" in sentence) # in
print("e不在sentence中:", "e" not in sentence) # not in
四、常用的字符串方法
4.1字符大小写转换
Python有部分方法能够实现字符串的大小写转换
字符串大小写转换方法:用sname来表示字符串或字符串变量
每个方法均返回一个新的字符串,原字符串不变
方法 | 说明 |
---|---|
sname.title() | 将字符串中的每个单词首字母大写 |
sname.upper() | 将字符串中所有字母转为大写 |
sname.lower() | 将字符串中所有字符转为小写 |
例:字符串大小写转换方法的使用
sname = ("I want to study")
print("sname.title():", sname.title())
print("sname.upper():", sname.upper())
print("sname.lower():", sname.lower())
4.2判断字符内容
Python提供了判断字符串中是否包含某些字符的方法
判断字符串内容的方法:用sname来表示字符串或字符串变量
方法 | 说明 |
---|---|
sname.isupper() | 当字符串中所有字符都是大写时返回True,否则返回False |
sname.islower() | 当字符串中所有字符都是小写时返回True,否则返回False |
sname.isalpha() | 当字符串中所有字符都是字母或中文字时返回True,否则返回False |
sname.isnumeric() | 当字符串中所有字符都是数字时返回True,否则返回False |
sname.ispeace() | 当字符串中所有字符都是空格时返回True,否则返回False |
例:检验密码内容
password = input("请输入密码(必须包含数字和字母):")
print("密码是否全是字母:", password.isalpha())
print("密码是否全是数字:", password.isnumeric())
4.3分割和合并字符串
字符串可以用特定字符分割为列表形式,列表以及其他的可迭代对象也可以合并为一个字符串
字符串分割和合并方法:用sname来表示字符串或字符串变量
方法 | 说明 |
---|---|
sname.split(sep = None,maxsplit = -1) | 字符串用sep分割后以列表形式返回 |
sname.join(iterable) | 将可迭代对象iterable用字符串sname拼接在一起,返回一个合并后的新字符串 |
例:字符串分割和合并的使用
sname = "人-生-苦-短-我-用-Python"
list1 = sname.split("-") # 将sname字符串以“-”分割
print(list1)
join_str = "~".join(list1) # 用“~”将list1列表中的元素连接起来
print(join_str)
4.4检索子串
Python提供多种方法用于查找、统计字符串中的特定内容
字符串检索方式:用sname来表示字符串或字符串变量
方法 | 说明 |
---|---|
sname.count(sub,[start[,end]]) | 返回sname[start:end]中sub子串出现的次数,如果字符串中没有sub子串则返回0 |
sname.find(sub,[start[,end]]) | 返回sname[start:end]中首次出现sub子串的索引,如果字符串中没有sub子串则返回-1 |
sname.index(sub,[start[,end]]) | 返回sname[start:end]中首次出现sub子串的索引,如果字符串中没有sub子串则报错 |
sname.startswith(prefix,[start[,end]]) | 返回sname[start:end]是否以prefix子串开头,如果是则返回True,否则返回False |
sname.endswith(suffix,[start[,end]]) | 返回sname[start:end]是否以suffix子串结尾,如果是则返回True,否则返回False |
说明:
-
start和end都是可选参数。如果不传入start,则从开头开始检索;如果不传入end,则一直检索至末尾
-
index()方法在没有检索到子串时会报错,程序异常,异常类型为ValueError
例:字符串检索方法的使用
sname = "count方法的用处是返回sname[start:end]中sub子串出现的次数"
print("sname中s出现的次数:",sname.count("s"))
print("sname中count子串的索引:",sname.find("count"))
print("sname中'返回'子串的索引:",sname.index("返回"))
print("sname是以'方法'为开头吗:",sname.startswith("方法"))
print("sname是以'次数'为结尾吗:",sname.endswith("次数"))
4.5替换子串
replace()方法实现字符串的替换,语法格式:用sname来表示字符串或字符串变量
sname.replace(old,new[,count])
说明:
- sname中所有的old子串被替换为new,如果传入参数count,则前count个old子串被替换
例:错别字替换
sname = "燕子去了,有再来地时候;杨柳枯了,有再青地时候;桃花谢了,有再开地时候。"
new_str = sname.replace("地","的")
print("错别字替换后的字符串:",new_str)
4.6去除空格等字符
字符串中有时候会出现多余的空格或空白行
为了获取字符串中有效的内容,可以对其中的多于字符进行去除,返回新的字符串,源字符串不变
字符串取出多于字符方法:用sname来表示字符串或字符串变量
方法 | 说明 |
---|---|
sname.strip([chars]) | 在字符串左侧和右侧去除chars中列出的字符 |
sname.lstrip([chars]) | 在字符串左侧去除chars中列出的字符 |
sname.rstrip([chars]) | 在字符串右侧去除chars中列出的字符 |
说明:
- chars为可选参数,用于指定需要去除的字符,可以指定多个
- 如果不指定chars参数,则默认去除空格、制表符\t、回车符\r、换行符\n等
例:strip()方法的使用
sname = "#学习Python@"
new_str = sname.strip("#@")
print(new_str)