Python教程

【保姆级入门系列】阿ken的 Python学习笔记(三)数字类型和字符串

本文主要是介绍【保姆级入门系列】阿ken的 Python学习笔记(三)数字类型和字符串,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

你好,我是阿ken
翻翻草稿箱里还有几十篇以前整理的笔记还没跟大家分享,之后会慢慢陆续跟大家分享出来的,一起加油鸭
在这里插入图片描述

本文目录

  • 3.1 数字类型
    • 3.1.1 整型
    • 3.1.2 浮点型
    • 3.1.3 复数类型
    • 3.1.4 布尔类型
  • 3.2 数字类型的运算
    • 3.2.1 数值运算符
    • 3.2.3 数字类型转换
  • 3.3 数学模块 —— math
      • 1. 常数
      • 2. 数值表示函数
      • 3. 幂函数与对数函数
      • 4. 三角函数
      • 5. 高等特殊函数
      • 6. 实例: 三天打鱼两天晒网
  • 3.4 字符串
    • 3.4.1 字符串的定义方式
      • 1. 单行字符串
      • 2. 多行字符串
    • 3.4.2_字符串格式化
      • 1. 使用格式符(%)对字符串格式化
      • 2. 使用 format() 方法对字符串格式化
    • 3.4.3_字符串操作符
    • 3.4.4_字符串处理函数
    • 3.4.5_字符串处理方法
      • 1. 大小写转换
      • 2. 判断字符串中字符的类型
      • 3. 填充字符串
      • 4. 从字符串中搜索子串
      • 5. 判断字符串前缀/后缀
      • 6. 替换字符串
      • 7. 分割字符串
    • 3.5 实例:过滤敏感词
    • 3.6 本章小结

3.1 数字类型

Python 内置的数字类型有整型(int)、浮点型(float)、复数类型(complex),布尔类型(bool)

3.1.1 整型

Python 中可以使用 4 种进制表示整型,分别为:二进制、八进制、十进制和十六进制,默认采用十进制表示。

a =   # 二进制用0b或0B开头
# 八进制用0o或0O开头
# 十六进制以0x或0X开头

3.1.2 浮点型

Python 中浮点数一般以十进制表示,由整数和小数部分组成,例如 1.23、10.0

3.1.3 复数类型

形如 3+2j、3.1+4.9j 的数据被称为复数。复数由实部和虚部两部分组成,其中实部是一个实数,虚部则是一个实数与j或J的组合。
复数必须具备以下几个特点:
(1)虚部不能单独存在,它总是和一个值为0.0的实数部分构成一个复数。
(2)实数部分和虚数部分都是浮点型。
(3)虚数部分后面必须有j或J。

3.1.4 布尔类型

Python 中的布尔类型只有 True(真,对应整数1)和 Flase(假,对应整数0)两个取值。
任何对象都具有布尔属性,下面数据的布尔值都是 False。
(1)None
(2)False
(3)任何为0的数字类型,如0、0.0、0j
(4)任何空序列,如“”、()、[ ]。
(5)空字典,如 { }
(6)用户定义的类实例,如类中定义了_bool_()或者_len_()方法,并且该方法返回0或者布尔值 False。

3.2 数字类型的运算

3.2.1 数值运算符

  1. 算术运算符
    Python 中的算术运算符包括 +、-、*、/、//、% 和 **,它们都是双目运算符。

  2. 赋值运算符
    赋值运算符的作用是将一个表达式或对象赋给一个左值。

  3. 比较运算符

Python 中的比较运算符包括 ==、!=、>、<、>=、<=,它们通常用于布尔测试,测试的结果只能是 True 或 False。

  1. 逻辑运算符
    Python 中的逻辑运算符包括 or(或)、and(与)、not(非)

  2. 成员运算符
    成员运算符用于测试给定值是否在序列(列表、字符串表)中。成员运算符有 in 和 not in 。
    (1)in:如果指定元素在序列中,返回 True,否则返回 False
    (2)not in:如果指定元素不在序列中,返回 True,否则返回 False。

  3. 身份运算符
    Python的一切数据都可以视为对象,每个对象都有3个属性:类型、值和身份。其中,类型决定了对象可以保存什么样的值;值代表对象表示的数据,比如100、3.14等;身份就是内存地址,它是每个对象的唯一标识,对象被创建以后身份不会再发生任何变化。

Python 中的身份运算符为: is 和 is not,用于判断两个对象的内存地址是否相同。身份运算符的功能如下。

(1) is:测试两个对象的内存地址是否相同,相同返回 True;否则返回 False。

(2) is not:测试两个对象的内存地址是否不同,不同返回True,否则返回False。例如,变量a的值为10,变量b的值为10,通过 is 来检查它们两个的内存地址是否相同,另外再通过 id() 函数进行验证,代码如下:

3.2.3 数字类型转换

数字类型转换是在保证用户有需求的情况下,将目标数据转换为指定的类型。

数字间进行转换的函数有 int()、float()、complex()、bool()。

3.3 数学模块 —— math

1. 常数

math 模块给了 pi、e、inf、nan。

2. 数值表示函数

函数数字表示说明
ceil(x)向上取整,返回不小于x的最小整数
copysign(x,y)复制符号位,用y的正负号替换x的正负号
fabs(x)x的绝对值返回x的绝对值
factorial(x)x!返回x的阶乘,x必须为正整数或0,否则会报错
floor(x)向下取整,返回不大于x的最大整数
fmod(x,y)x%y返回x与y的模
frexp(x)x=m*2**e返回(m,e),若x为0.则返回(0.0,0)
fsum(iterable)浮点数精确求和
gcd(a,b)返回a和b的最大公约数
isclose(a,b)比较a和b的相似性,相近返回True,否则返回False
isfinite(x)若x既不是无穷大也不是NaN,则返回True,否则返回False
isinf(x)若x是无穷大,则返回True,否则返回False
isnan(x)若x是NaN,则返回True,否则返回False
ldexp(x, i)返回x*(2**i)
modf(x)返回x的小数和整数部分
trunc(x)返回x的整数部分。

3. 幂函数与对数函数

函数说明
exp(x)返回e的x次幂
expml(x)返回e的x次幂减去1
log(x[, base])返回x的自然对数
log1p(x)返回1+x的自然对数
log2(x)返回x的以2为底的对数
log10(x)返回x的以10为底的对数
pow(x, y)返回x的y次幂
sqrt(x)返回x的平方根

4. 三角函数

函数数学表示说明
sin(x)sin x返回x的正弦函数值
cos(x)cos x返回x的余弦函数值
tan(x)tan x返回x的正切函数值
asin(x)arcsin x
acos(x)arccos x返回x的反余弦函数值
atan(x)arctan x返回x的反正切函数值
atan2(y, x)arctan y/x返回y/x的反正切函数值

5. 高等特殊函数

math 模块中还增加了一些具有特殊功能的函数

高等特殊函数

函数说明
math.erf(x)高斯误差函数
math.erfc(x)余补高斯误差函数
math.gamma(x)伽玛函数,也叫欧拉第二积分函数
math.Igamma(x)伽玛函数的自然对数

高斯误差函数在概率论、统计学以及偏微分方程中有着广泛的应用,而伽玛函数在分析学、概率论、偏微分方程和组合数学中有着广泛的应用,它们均不属于初等数学,但是非常有趣。例如,利用伽玛函数计算浮点数的“阶乘”,代码如下:

math.gamma(6)  # 求0 ~ 5范围内的整数阶乘
120.0

6. 实例: 三天打鱼两天晒网

使用 Python 程序进行模拟,将1.0作为能力值的基数,好好学习一天能力值相比前一天提高1%,懒惰懈怠一天能力值比前一天下降1%,因此,可以得出“三天打鱼,两天晒网”的公式如下所示:
(10+0.01)3×(1.0-0.01)2<(1.0+0.01)

将上述公式转换为代码:

04_fishing.py
import math
fish = math.pow( (1.0+0.01), 3)  # 三天打鱼
net = math.pow( (1.0-0.01),2)  # 两天晒网
print(fish * net)
print(fish * net < 1.0 + 0.01)

程序执行的结果如下:

1.0097980101000001
True

由输出结果可知,若是“三天打鱼两天晒网”,能力值反而小于1.01,说明一个人若不能持之以恒,最终仍然是一无所获。

3.4 字符串

字符串是一组由字符构成的序列。与其他编程语言不同, Python 中的字符串是不支持动态修改的。

3.4.1 字符串的定义方式

根据字符串中是否包含换行符,可以将字符串划分成单行字符串和多行字符串两种,它们各自定义的方式有所不同。

1. 单行字符串

单行字符串包含在一对单引号或一对双引号中,例如:

# 合法的字符串
'Hello','He"llo'
"Python","Pyth'on"
# 非法的字符串
'He'11o'
"Pyth"on"

单引号括起的字符串中可以包含双引号,但不能直接包含单引号,因为 Python 解释器会将字符串中出现的单引号与标识字符串的第一个单引号配对,认为字符串到此已经结束。同样,使用双引号标识的字符串中不可以直接包含双引号。
若要解决以上问题,可以对字符串中的特殊字符(单引号、双引号或其他)进行转义处理、即在特殊字符的前面插入转义字符(),使得转义字符与特殊字符组成新的含义,例如:

'let\'s go'   # 对单引号进行转义
"let's go"

以上代码使用转义字符对单引号进行了转义,解释器此时不再将单引号视为字符串的语法标志,而是将其与转义字符视为一个整体。除此之外,还可以在字符申的前面添加 r 或者 R ,将字符串中的所有字符按字面的意思使用,禁止转义字符的实际意义。例如:

print(r'C:\user\name') # \n表示换行符, 通过 r 禁止其实际意义
C:\user\name

2. 多行字符串

多行字符串以一对三单引号或三双引号作为边界来表示,示例如下:

words = '''多行字符串的第1行
多行字符串的第2行'''
print(words)

程序输出的结果如下:

多行字符串的第1行
多行字符串的第2行

通常情况下,三引号表示的字符串代表文档字符串(多行注释),主要用来说明包、模块、类或者函数的功能。例如,官方文档中对 len() 函数的说明如下:

def len(*args, **kwargs):
""" Return the number of items in a container."""
pass

以上文档字符串刪译成中文是返回容器中的项数。另外,函数的说明也可以通过 " 函数名._ doc_ " 查看,例如:

len._doc_
'Return the number of items in a container.'

画过函数的文档字符串,开发者可以快速地了解该函数的功能。
需要注意的是,C语言等其他一些语言中由引号包含的单字符数据属于字符类型,但 Python 不支持字符类型,单个字符也被视为字符串。

字符排定义规范
(1) 字符串可以使用单引号或双引号定义,但是应选择一种方式在源文件中统一使用、避免混合使用。
(2) 如果在字符串中包含某种引号,那么应优先使用另一种形式的引号包含字符串,而非使用转义字符。

3.4.2_字符串格式化

若希望程序输出如下内容:
计算机Mac: IP地址为192.168.1.12,端口为8888
由于以上内容斜体的字符是不断变化的,通过普通的字符串在程序中实现此种字符串显然比较烦琐,此时可以使用字符串格式化来实现生成格式固定但不完全相同的字符串的需求。在 Python 中,字符串的格式化可以使用格式符(%)和 format() 方法实现,下面分别对这两种方式进行详细介绍。

1. 使用格式符(%)对字符串格式化

以格式符对字符串格式化时,Python 会使用一个带有格式符的字符串作为模板,这个格式符用于为真实值预留位置,并说明真实数值应该呈现的格式。例如:

我叫%s" % '小明'

以上所示的字符串 " 我叫%s " 是一个模板,该字符串中的 “%s” 是一个格式符,用来给字符串类型的数据预留位置。“小明”是替换“%s”的真实值。模板和真实值之间有一个“%”,表示执行格式化操作。“小明”会替换模板中的“%s”,最终返回字符串“我叫小明”。
另外,Python 可以用一个元组 (小括号里面包含多个基本数据类型) 将多个值传递给模板,元组中的每个值对应着一个格式符。例如:

"我叫%s, 今年%d岁了" % ('小明', 18)

上述示例中,“我叫%s,今年%d岁了”是一个模板,其中“%s”为第1个格式符,表示给字符串类型的数据占位,“%d”为第2个格式符,表示给整型占位。(‘小明’, 18) 中的“小明”和“18”是替换“%s”和“%d”的真实值,在模板和元组之间使用“%”分隔,最终返回的字符串是“我叫小明,今年18岁了”。

Python还支持其他类型的格式符:

常见的格式符

格式符说明
%c字符
%s通过str()转换后的字符串
%i或%d有符号十进制整数
%o八进制整数
%x六进制整数(小写字母)
%X十六进制整数(大写字母)
%e索引符号(小写“e”)
%E索引符号(大写"E")
%f十进制浮点数(小写字母)
%F十进制浮点数(大写字母)
%g浮点数或指数,根据值的大小选择采用%f或%e
%G浮点数或指数,根据值的大小选择采用%F或%E

以格式符方式格式化字符时支持通过字典传值,这时需要先以“(name)"形式对变量进行命名,每个命名对应字典的一个键。示例如下:

"我叫%(name)s, 今年%(age)d岁了" % {'name': '小明','age': 18 } )

还可以进一步控制字符串的格式。示例如下:

print("%+10x" % 10) # +表示右对齐,宽度为10,十六进制
print("%04d" % 5) # 表示用0填充,宽度为4,十进制整型
print("%.3f" % 2.3) # 表示精确到小数点后3位

格式符可以控制字符串所呈现的格式,操作是比较方便的。

2. 使用 format() 方法对字符串格式化

该方法摆脱了“%”操作符的特殊用法。

format() 方法的基本使用格式:

<模板字符串>.format(<参数列表>)

以上格式中的模板字符串由字符串和 “ { } ” 组成,“{ }” 的作用与%相同,用来控制修改字符串中插入值的位置。示例如下:

"{ } 是人类进步的阶梯。".format("书籍")
'书籍是人类进步的阶梯。'

如果模板字符串中有多个 “{ }”,并且 “{ }” 内没有指定任何序号(从0开始编号),则默认按照 “{ }” 出现的顺序分别用参数进行替换,

如果模板字符串中的“{ }”明确使用了参数的序号,则需要按照序号对应的参数进行替换,

format() 方法中,模板字符串的花括号中除了参数序号以外,还可以包括其他控制信息,这时,“{ }” 内部的样式如下:

{ <参数序号>:<格式控制标记> } 

# 图 P74
在这里插入图片描述

以上样式中的格式控制标记包括 <填充>、<对齐>、<宽度>、<,>、<精度>、<类型> 这6个字段,这些字段都是可选的,可以组合使用。

6个字段的功能:
(1) <填充> 字段是一个字符,默认使用空格填充。
(2) <对齐> 字段分别使用 <、> 和 ^3 个符号表示左对齐、右对齐和居中对齐。
(3) <宽度> 字段是指 “{ }” 所设定的输出字符串的宽度,如果 <宽度> 设定值比参数的实际长度小,则使用参数的实际长度,否则就使用 < 宽度 > 设定值。示例如下:

words = "design"
"{:10}".format(words) # 左对齐,填充空格至宽度为10
'design   '
"{:>10}".format(words) # 右对齐,填充空格至宽度为10
'   design'
"{:@^10}".format(words) # 居中对齐,且填充@至宽度为10
'@@design@@'
"{:@^1}".format(words) # 宽度不足,则返回原字符串
'design'

(4) <,>用于显示数字类型的千位分隔符,例如:

'{0:,}'.format(31415926) # 显示干位分隔符

(5) <. 精度 > 字段以小数点开头。对于浮点数而言,精度表示小数部分输出的有效位数;对于字符串而言,精度表示输出的最大长度。示例如下:

"{:.5f}".format(3.1415926) # 输出浮点数,保留5位小数
'3.14159'
"{:.5}".format("python") # 字符串的长度为5
'pytho'

(6) <类型> 字段用于控制整型和浮点型的格式规则。针对整型的不同进制形式,特提供了不同的输出格式:

  • b:输出整型的二进制形式。
  • c:输出整型对应的 Unicode字符。
  • d:输出整型的十进制形式。
  • o:输出整型的八进制形式。
  • x:输出整型的小写十六进制形式。
  • X:输出整型的大写十六进制形式。

针对浮点型,输出格式可以分为以下几种:

  • e:输出浮点数对应的小写字母e的指数形式。
  • E:输出浮点数对应的大写字母E的指数形式。
  • f:输出浮点数的标准形式。
  • %:输出浮点数的百分比形式。

整型和浮点型的输出格式示例如下:

"{:c}".format(97) # Unicode字符
'a'
"{:X}".format(10) # 大写的十六进制
'A'
"{:E}".format(1568.736) # E的指数
'1.568736E+03'
"{:%}".format(0.80) # 百分比
'80.000000%'

值得一提的是,格式符的方式在 Python 2.x 中用得比较广泛,在 Python 3.x 中,format() 方法的应用更加广泛。
现在使用的九九乘法表自上而下从 “一 一 如 一 ” 开始到 “ 九九八十一 ” 为止,表格中每个表达式都有着固定的格式: “乘数 * 乘数 = 积”。下面使用 format() 方法输出一条符合以上格式的表达式,具体代码如下:

a=int(input('请输入第1个数:') )
b=int(input('请输入第2个数:') )
print("{}*{}={:2d}".format(a, b, a*b) )

执行程序,程序输出的结果:

请输入第1个数:1
请输入第2个数:1
1*1 = 1

3.4.3_字符串操作符

Python 提供了众多字符串的操作符。

下面以 a= " Hello ",b= " itcast " 为例,演示 Python 中适用于字符串的操作符的功能

字符串操作符

操作符说明示例
+连接字符串a+b,结果为 Helloitcast
*复制字符串a*2,结果为 HelloHello
>,<,==,!=,>=,<=按照 ASCII 值的大小比较字符串a==b,结果为False
in, not in检查字符串中是否存在或不存在某个子串a in b,结果为 False

下面是字符串操作符的部分示例:

'secret' + 'garden' # 使用 + 连接两个字符串
'secretgarden'
'Python!' * 3 # 复制3次字符串
'Python!Python!Python!' 
'it' in 'itcast' # 检测it是否存在于itcast中
True
'cast' not in 'itheima' # 检测cast是否不存在于itheima中
True

虽然通过 " + " 操作符可以连接多个字符串,但是效率非常低,这是因为Python中字符串属于不可变类型,在循环连接字符串的时候会生成新字符串,每生成一个新字符串就需要申请一次内存空间,内存操作过于频繁。Python 不建议使用 “+” 操作符拼接字符串,后续内容会介绍一些其他的字符串连接方法。

3.4.4_字符串处理函数

Python 为开发者提供了很多内置函数,使用这些内置函数可以便捷地对字符串执行一些常见的操作,例如计算字符串的长度、返回单字符 Unicode 编码等。

字符串类型相关函数

函数说明
len()返回字符串的长度,或返回其他组合数据类型的元素个数
str()返回任何类型所对应的字符串形式
ord()返回单字符对应的 Unicode 编码

使用上表中的函数处理字符串,具体示例如下:

words= " Python程序设计 "
print( " words 的长度为: %d " % len(words) )  # 计算字符串的长度
words 的长度为: 10
a = 100  # 将整型转换成字符串
str(a)
'100'
word = 'a'
ord(word)  # 返回单字符的 ASCII 值
97

3.4.5_字符串处理方法

Python 中还提供了许多字符串操作的方法,方法与函数非常相似,但是调用方式不同,函数是直接以“函数名(实参”的形式调用的,而方法则需要通过前导对象来调用。有关字符串处理的方法非常多,按照不同的功能,常用的方法可以分为以下几种:大小写转换、判断字符串中字符的类型、填充字符串、从字符串中搜索子串、判断字符串前缀/后缀、替换字符串、分割字符串等。下面根据功能对不同的方法进行详细地介绍。

1. 大小写转换

如果希望将字符串中所有的字符统一转换为小写或大写,可以通过lower()、upper() 方法实现。例如,将字符串 " Hello,Python " 中全部的字符分别转换为小写和大写形式,具体如下:

words = 'Hello, Python'
print("全部转换为小写 : %s" words.lower() )
print("全部转换为大写 : %s" words.upper() )

程序输出的结果如下:
全部转换为小写:hello, python
全部转换为大写:HELLO, PYTHON
此外,如果想转换为标题形式的字符串,则可以通过 title()、capitalize() 方法实现,前者会返回所有首字母大写且其他字符小写的新字符串,后者返回的是首字母大写其余字符全部小写的新字符串。将字符串 " hello, python " 转换成标题式字符串的示例如下:

words = 'hello, python'
print("所有单词的首字母转换为大写 : %s" % words.title() )
print("首字母转换为大写 : %s" % words.capitalize() )

程序输出的结果如下:

所有单词的首字母转换为大写: Hel1o, Python
首字母转换为大写: He1lo, python

还可以通过 swapcase() 方法将字符串中所有的大写字母转换为小写、小写字母转换成大写。例如,将字符串 " HELLO, python " 中的字符的大小写进行互换,具体如下:

words = 'HELLO, python'
print("大写转换为小写, 小写转换为大写 : %s" % words.swapcase() )

程序输出的结果如下:

大写转换为小写, 小写转换为大写: he1lo,PYTHON

2. 判断字符串中字符的类型

字符串中包含的字符可以是字母、数字、汉字和符号,例如 1、2、3、A、B、C、!、#、¥、% 等。在注册一些网站时,可以看到有关账号和密码中可输入字符的提醒,有的只能键入字母类型,有的不支持键入中文字符,如果用户填写的过程中出现了不符合要求的字符,输入框的右侧会出现红色的提示文字。 Python 中提供了一些针对字符串进行判断的方法。

字符串类型相关方法

方法说明
isdecimal()如果字符串中只包含十进制数字则返回 True,否则返回 False
isdigit()如果字符串中只包含数字则返回True,否则返回False
isnumeric()如果字符串中只包含数字则返回True,否则返回False
isalpha()如果字符串中至少有一个字符,并且所有字符都是字母则返回True,否则返回False
isalnum如果字符串中至少有一个字符,并且所有字符都是字母或数字则返回True,否则返回False

检查字符串中字符类型的示例具体如下:

print('34'.isdigit() ) # 字符串'34'中是否只包含数字
True
print('abc'.isalpha() ) # 字符串'abc'中是否只包含字母
True
print('a34'.isalnum() ) # 字符串'a34'中是否只包含字母和数字
True

3. 填充字符串

若想使输出的字符串整齐美观,可以对字符串进行填充。填充字符串是指使用指定的字符 ( 默认是空格 ) 填充字符串至一定的长度,并通过填充位置来控制原字符串的对齐方式。字符串的对产方式分为左对齐、居中对齐或右对齐。例如,字符串 " Hello " 的初始长度为5,使用 " * " 填充其长度变为11,3种对齐方式的填充方法:

在这里插入图片描述

Python 针对以上 3 种对齐方式均提供了对应的方法:
(1) ljust(width, fillchar=None):使用字符 fillchar 以右对齐方式填充字符串,使其长度变为 width。
(2) center(width, fillchar=None):使用字符 fillchar 以居中对齐方式填充字符串,使其长度变为 width。
(3) rjust(width, fillchar=None):使用字符 fillchar 以左对齐方式填充字符串,使其长度变为 width。

如果指定字符串填充的长度小于字符串本身的长度,则只会返回字符串本身。另外,指定填充的字符串长度只能为1,即只有一个字符。

填充字符串的示例具体如下:

words = 'Hello!'
print("采用左对齐的方式填充: %s" % words.ljut(20, '-') )
print("采用居中对齐的方式填充: %s" % words.center(20, '-') )
print("采用右对齐的方式填充: %s" % words.rjust(20, '-') )

程序输出的结果如下:

采用左对齐的方式填充:  Hello!----------
采用居中对齐的方式填充:-----Hell0!-----
采用右对齐的方式填充:  ----------Hello!

4. 从字符串中搜索子串

如果需要在指定的范围内检索字符串中是否包含子串,可以通过find()和 index()方法实现。find()和 index()方法默认会从整个字符串中进行搜索,也可以在指定的范围内搜索。这两个方法的语法格式如下:

find(sub, start=Toner end=None)
index(sub, start=None, end=None)

以上两个方法中,参数 sub 表示待检索的子串;参数 start 表示开始索引,默认为0;参数 end 表示结束索引,默认为字符串的长度。
若使用 find() 方法查找到子串,则返回子串出现的最小索引值,否则返回-1;若使用 index() 方法查找到子串,则返回子串第一次出现的最小索引值,否则抛出 ValueError 异常。示例如下:

word = 'Hello, Welcome to python!'
word.find('python')  # 检查整个字符串中是否包含pyth
word.find('to', 0, 10) # 检查 [0,10] 范围内是否包含to
word index('to')  # 检查整个字符串中是否包含to
word.index('python', 5, 17) # 检查 [5,17] 范围内是否包含 Python
Traceback (most recent call last):
File "<stdin>", line l, in <module>
ValueError: substring not found

5. 判断字符串前缀/后缀

Python 提供了 startswith() 和 endswith() 方法实现判断字符串的前缀和后缀的功能,这两个方法的语法格式如下:

startswith(prefix, start=None, end=None)
endswith(suffix, start=None, end=None)

前者用于判断字符串是否以 prefix 开头,后者用于判断字符串是否以 suffix 结尾,若结果为是则返回True,否则返回 False。
例如,判断字符串 “hm_python” 是否以 " hm " 为开头,具体如下:

words ="hm python"
words. startswith("hm") # 在整个字符串中,判断是否以hm开头
True
>> words.startswith("hm", 2, 6) # 在[2,6]范围中,判断是否以hm开头
False

还可以通过 count() 方法判断子串在字符串中出现的次数,示例如下:

print('xyabxyxy', count('xy') )
3

6. 替换字符串

replace() 方法用于使用新字符串替换目标字符串中的指定子串,可指定替换次数,该方法的语法格式如下:

str.replace(old, new, count=None)

以上方法中,参数old表示将被替换的子串,参数new表示替换的新子串,参数 count 表示替换的次数。

replace() 方法的使用示例:

word = "我是小明, 我今年28岁"
word.replace("我", "他")
'他是小明, 他今年28岁'
word.replace("我", "他", 1)
'他是小明, 我今年28岁'

如果在字符串中没有找到匹配的子串,直接返回原字符串。示例如下:

word.replace("他", "我")
'我是小明, 我今年28岁'

7. 分割字符串

split() 方法用于将字符串以分隔符分割成字符串列表,该方法的语法格式如下:

str.split(sep=None, maxsplit=-1)

以上方法中,参数sep表示分隔符,默认为空格,亦可被设置为其他字符,例如空格、换行(\n)、制表符(\t)等;参数 maxsplit 表示分割的次数。
通过 split() 方法分割字符串的示例如下:

word = "1 2 3 4 5"
word.split()
['1', '2', '3', '4', '5']
word = "a,b,c,d,e"
word.split(",")
['a', 'b', 'c', 'd', 'e']
word.split(",", 3)
['a', 'b', 'c', 'd,e']

因为字符串的不可变性,所以前面所讲的这些操作都会产生新的字符串。

3.5 实例:过滤敏感词

敏感词一般是指带有敏感政治倾向(或反执政党倾向)暴力倾向、不健康色彩的词或不文明用语,论坛、网站管理员一般会设定一些敏感词,以防不当发言影响论坛、网站环境。若论坛、网站设置了敏感词,用户编辑的内容又含有敏感词,论坛和网站会将其判定为不文明用语,阻止内容的发送,或使用 " * " 替换其中的敏感词。

下面将用 Python 程序实现过滤敏感词:
实现过滤敏感词功能的思路是:首先设定敏感词库,之后对用户输入的语句进行检查,如果其中包含敏感词库中的词汇,通过 replace() 方法使用 " * " 替换敏感词。

实现过滤敏感词功能的代码如下:

# 05_Filtering_words.py
# 建立敏感词库
sensitive_character = ["操"]
result = ''
test_sentence = input('请输入一段话:')
# 遍历输入的字符是否存在敏感词库中
for line in sensitive_character:
if line in test_sentence: # 判断是否包含敏感词
result = test_sentence.replace(line, '*')
test_sentence = result
print(test_sentence)

程序运行的结果如下:

请输入一段话:你的键盘操作很流畅
你的键盘*作很流畅

3.6 本章小结

本章主要介绍了与 Python 基本数据类型 —— 数字类型和字符串相关的知识,包括数字类型的运算、字符串格式化、字符串操作符、字符串函数和方法,另外还介绍了数学模块 math 。

在这里插入图片描述

有时候总觉得自己挺忙碌挺用功了
但跟别人一比还是觉得差了好多
总是在自我肯定和自我否定中不停徘徊
也在从一点点的懵懂无知走到今天你所看到的我
路途充满艰辛
任何一点点的改变和进步都是努力争取后的结果
但只有一直这样慢慢努力慢慢沉淀
才能成为人们眼中的大佬
我只管听从前辈教诲慢慢向上
任凭旁人褒贬
虽万人吾往矣

在这里插入图片描述
感谢拜访

Python 学习传送门:

【保姆级入门系列】阿ken的 Python学习笔记(四) ——流程控制
【保姆级入门系列】阿ken的 Python学习笔记(五) ——函数
【保姆级入门系列】阿ken的 Python学习笔记(六) ——组合数据类型

这篇关于【保姆级入门系列】阿ken的 Python学习笔记(三)数字类型和字符串的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!