【Python入门第五讲】字符串(下篇)

2024-01-23 08:17:00 浏览数 (2)

前言

前面介绍了常用类的函数相关操作,详细内容请前往 【Python入门第四讲】字符串(上篇)阅读。

这一篇 Python 字符串转义字符运算符、以及格式化输出的相关知识

转义字符

在编程语言中,转义字符用于表示一些特殊字符,这些字符本身难以直接表示或者具有特殊的含义。在Python字符串中,常见的转义字符以反斜杠 开始,后面跟着特殊字符。

具体说明请参考下表:

符号

说明

'

单引号

"

双引号

a

发出系统响铃声

空字符

n

换行符

r

回车符

t

横向制表符(Tab)

v

纵向制表符

f

换页符

反斜杠

o

八进制表示符

x

十六进制表示符

b

退格符(Backspace)

让我们选择一些常见的转义字符来演示一下效果:

代码语言:python代码运行次数:0复制
# 单引号
print('这是一个单引号的例子:' ')

# 双引号
print("这是一个双引号的例子:" ")

# 响铃
print("这是一个响铃声的例子:a ")

# 空字符
print("这是一个空字符的例子: ")

# 换行
print("这是一个换行的例子:n 第二行.")

# 回车
print("这是一个回车的例子:第一行. r 第二行.")

# 制表符
print("这是一个制表符的例子:第一t第二")

# 垂直制表符
print("这是一个垂直制表符的例子:第一v第二")

# 换页
print("这是一个换页的例子:第一f第二")

# 反斜杠
print("这是一个反斜杠的例子:\ ")

# 八进制数
print("这是一个八进制转义的例子:o12 ")

# 十六进制数
print("这是一个十六进制转义的例子:x4e2d ")

# 退格
print("这是一个退格的例子:AbB")

输出:

代码语言:python代码运行次数:0复制
这是一个单引号的例子:' 
这是一个双引号的例子:" 
这是一个响铃声的例子: 
这是一个空字符的例子:  
这是一个换行的例子:
 第二行.
 第二行.
这是一个制表符的例子:第一	第二
这是一个垂直制表符的例子:第一第二
这是一个换页的例子:第一第二
这是一个反斜杠的例子: 
这是一个八进制转义的例子:o12 
这是一个十六进制转义的例子:N2d 
这是一个退格的例子:B

字符串运算符

字符串运算符与相关描述,请参考下表:

符号

说明

拼接字符串

*

重复输出字符串

[]

通过索引取字符串元素

[:]

截取部分字符串,遵循左闭右开原则

in

成员运算符,判断字符串是否包含元素

not in

成员运算符,与 in 相反

r/R

原始字符串,让转义字符失效

%

格式化字符串

拼接字符串:

使用加号 可以将两个字符串拼接在一起。

代码语言:python代码运行次数:0复制
str1 = "Hello"
str2 = " World"
result = str1   str2
print(result)

输出:

代码语言:javascript复制
Hello World

重复字符串:*

使用乘号 * 可以重复一个字符串多次。

代码语言:python代码运行次数:0复制
str1 = "Python "
result = str1 * 3
print(result)

输出:

代码语言:javascript复制
Python Python Python 

通过索引取字符串元素:[]

使用方括号 [] 可以通过索引访问字符串中的单个字符,索引从0开始。

代码语言:python代码运行次数:0复制
str1 = "Python"
print(str1[0])  # P
print(str1[2])  # t

注意:字符串是不可变的,不能通过索引直接修改字符串中的字符。

截取部分字符串:[:]

使用切片操作可以获取字符串的子串,语法为 start:end,包含起始索引 start,但不包含结束索引 end

代码语言:python代码运行次数:0复制
str1 = "Python"
print(str1[1:4])  # yth

如果不指定 start,则默认为从字符串开头开始;如果不指定 end,则默认为字符串末尾。

代码语言:python代码运行次数:0复制
str1 = "Python"
print(str1[:3])   # Pyt
print(str1[2:])   # thon

成员运算符 innot in

可以使用 in 来检查一个字符串是否包含在另一个字符串中,not in 则是检查是否不包含。

代码语言:python代码运行次数:0复制
str1 = "Hello World"
print("Hello" in str1)      # True
print("Python" not in str1)  # True

原始字符串:r/R

原始字符串用于让转义字符失效,字符串前加上 rR

代码语言:python代码运行次数:0复制
path = r"C:UsersUsernameDocuments"
print(path)

输出:

代码语言:javascript复制
C:UsersUsernameDocuments

格式化字符串:%

字符串格式化可以使用 % 运算符。

代码语言:python代码运行次数:0复制
name = "zhangsan"
age = 25
message = "My name is %s and I am %d years old." % (name, age)
print(message)

输出:

代码语言:javascript复制
My name is zhangsan and I am 25 years old.

字符串格式化输出

字符串格式化输出与相关描述,请参考下表:

符号

说明

%c

格式化字符及其ASCII码

%s

格式化字符串

%d

格式化整数

%o

格式化无符号八进制数

%x

格式化无符号十六进制数

%X

格式化无符号十六进制数(大写)

%f

格式化浮点数字,可指定小数点后的精度

%e

用科学计数法格式化浮点数

%E

作用同 %e,用科学计数法格式化浮点数

%g

%f 和 %e 的简写

%G

%f 和 %E 的简写

format()

格式化字符串的函数,Python 2.6 开始

f-string

字面量格式化字符串,Python 3.6 开始

格式化操作符,常用辅助参数可参考下表:

辅助参数

描述

m. n.

m 为最小宽度,n为小数点位数

-

左对齐

添加符号

#

八进制添加 0o、十六进制添加0x或0X

0

显示数字时使用 0 取代空格

示例:

代码语言:python代码运行次数:0复制
# 使用 %c 格式化字符
char = 'A'
print("Character: %c" % char)

# 使用 %s 格式化字符串
string_var = "Hello"
print("String: %s" % string_var)

# 使用 %d 格式化整数
integer_var = 42
print("Integer: %d" % integer_var)

# 使用 %o 格式化八进制整数
octal_var = 63
print("Octal: %o" % octal_var)

# 使用 %x 和 %X 格式化十六进制整数
hex_var = 255
print("Hex (lowercase): %x" % hex_var)
print("Hex (uppercase): %X" % hex_var)

# 使用 %f 格式化浮点数
float_var = 3.14159
print("Float: %f" % float_var)

# 使用 %e 和 %E 格式化科学计数法
scientific_var = 1.23e-4
print("Scientific (lowercase): %e" % scientific_var)
print("Scientific (uppercase): %E" % scientific_var)

# 使用 %g 和 %G 自动选择格式
auto_var = 0.000012345
print("Auto (lowercase): %g" % auto_var)
print("Auto (uppercase): %G" % auto_var)

# 使用 format() 方法格式化字符串
name = "Alice"
age = 30
height = 1.65
formatted_string = "Name: {}, Age: {}, Height: {:.2f}".format(name, age, height)
print(formatted_string)

# 使用 f-string 格式化字符串
name = "Bob"
age = 25
height = 1.75
formatted_string = f"Name: {name}, Age: {age}, Height: {height:.2f}"
print(formatted_string)

输出:

代码语言:python代码运行次数:0复制
E:StudyPythonvenvScriptspython.exe E:StudyPythonLesson-onestr_down.py 
Character: A
String: Hello
Integer: 42
Octal: 77
Hex (lowercase): ff
Hex (uppercase): FF
Float: 3.141590
Scientific (lowercase): 1.230000e-04
Scientific (uppercase): 1.230000E-04
Auto (lowercase): 1.2345e-05
Auto (uppercase): 1.2345E-05
Name: Alice, Age: 30, Height: 1.65
Name: Bob, Age: 25, Height: 1.75

进程已结束,退出代码0

字符串格式化方法

在 Python 中,几种常用的字符串格式化方法:

百分号格式化(%):

类似于 C 语言的 printf 函数。使用 % 运算符插入变量或值。

代码语言:python代码运行次数:0复制
name = "Alice"
age = 25
message = "My name is %s and I'm %d years old." % (name, age)
print(message)

str.format() 方法:

使用 {} 占位符,通过 str.format() 方法传入参数。

代码语言:python代码运行次数:0复制
name = "Alice"
age = 25
message = "My name is {} and I'm {} years old.".format(name, age)
print(message)

f-string(格式化字符串字面量):

以字面量字符串的形式表示,使用 {} 插入表达式。

代码语言:python代码运行次数:0复制
name = "Alice"
age = 25
message = f"My name is {name} and I'm {age} years old."
print(message)

模板字符串:

使用 string.Template 类。

代码语言:python代码运行次数:0复制
from string import Template

name = "Alice"
age = 25
template = Template("My name is $name and I'm $age years old.")
message = template.substitute(name=name, age=age)
print(message)

以上这些方法各有特点,可以根据实际情况选择最适合的方式。在 Python 3 推荐使用 f-string,因为它更简洁、直观,并且在性能上通常更优。

九九乘法表

下面使用 Python 格式化输出打印九九乘法表的简单案例:

代码语言:python代码运行次数:0复制
# 打印九九乘法表
for i in range(1, 10):
    for j in range(1, i   1):
        # 使用 format 格式化,保留两位宽度,使输出整齐
        print("{} * {} = {:2}".format(j, i, i * j), end="  ")
    print()  # 换行
# 或者
for i in range(1, 10):
    for j in range(1, i   1):
        # 使用 {:2} 格式化,保留两位宽度,使输出整齐
        print(f"{j} * {i} = {i * j:2}", end="  ")
    print()  # 换行
    

使用两个嵌套的循环,外层循环控制行数,内层循环控制每行输出的乘法表达式。在内层循环中,通过 f-string 进行字符串格式化,其中 :2 表示保留两位宽度,使得输出整齐。 end=" " 控制输出不换行,而是使用两个空格分隔每个乘法表达式。

代码语言:python代码运行次数:0复制
1 * 1 =  1  
1 * 2 =  2  2 * 2 =  4  
1 * 3 =  3  2 * 3 =  6  3 * 3 =  9  
1 * 4 =  4  2 * 4 =  8  3 * 4 = 12  4 * 4 = 16  
1 * 5 =  5  2 * 5 = 10  3 * 5 = 15  4 * 5 = 20  5 * 5 = 25  
1 * 6 =  6  2 * 6 = 12  3 * 6 = 18  4 * 6 = 24  5 * 6 = 30  6 * 6 = 36  
1 * 7 =  7  2 * 7 = 14  3 * 7 = 21  4 * 7 = 28  5 * 7 = 35  6 * 7 = 42  7 * 7 = 49  
1 * 8 =  8  2 * 8 = 16  3 * 8 = 24  4 * 8 = 32  5 * 8 = 40  6 * 8 = 48  7 * 8 = 56  8 * 8 = 64  
1 * 9 =  9  2 * 9 = 18  3 * 9 = 27  4 * 9 = 36  5 * 9 = 45  6 * 9 = 54  7 * 9 = 63  8 * 9 = 72  9 * 9 = 81  

我正在参与2024腾讯技术创作特训营第五期有奖征文,快来和我瓜分大奖!

0 人点赞