字符串是 Python 中最常用的数据类型。我们可以使用引号( ' 或 " )来创建字符串。
创建字符串很简单,只要为变量分配一个值即可。例如:
var1 = 'Hello World!'
var2 = "Runoob"
Python 访问字符串中的值
Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。
Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下:
变量[头下标:尾下标]
索引值以 0 为开始值,-1 为从末尾的开始位置。
#!/usr/bin/python3
var1 = 'Hello World!'
var2 = "Runoob"
print ("var1[0]: ", var1[0])
print ("var2[1:5]: ", var2[1:5])
var1[0]: H
var2[1:5]: unoo
字符串更新
var1 = 'Hello World!' print ("已更新字符串 : ", var1[:6] + 'Runoob!')
已更新字符串 : Hello Runoob!
转义字符
在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符。如下表:
| 转义字符 | 功能描述 | 代码示例 & 运行效果 |
|---|---|---|
| ``(行尾) | 续行符,连接多行代码 | print("line1 ``... line2 ``... line3")✅ line1 line2 line3 |
\ | 输出反斜杠符号 | print("\")✅ `` |
' | 输出单引号 | print(''')✅ ' |
" | 输出双引号 | print('"')✅ " |
\a | 系统响铃提示 | print("\a")✅ 电脑发出提示音 |
\b | 退格(删除前一个字符) | print("Hello \b World!")✅ Hello World! |
\000 | 空字符 | print("\000")✅ (空白无输出) |
\n | 换行 | print("Hello\nWorld")✅ Hello✅ World |
\t | 横向制表符(缩进) | print("Hello\tWorld!")✅ Hello World! |
\v | 纵向制表符 | print("Hello\vWorld!")✅ 纵向间隔效果 |
\r | 回车(覆盖开头文本) | print("Hello\rWorld!")✅ World! |
\f | 换页符 | print("Hello\fWorld!")✅ 分页间隔效果 |
\yyy | 八进制字符 | print("\110\145\154\154\157")✅ Hello |
\xyy | 十六进制字符 | print("\x48\x65\x6c\x6c\x6f")✅ Hello |
print('\'Hello, world!\'') # 输出:'Hello, world!'
print("Hello, world!\nHow are you?") # 输出:Hello, world!
# How are you?
print("Hello, world!\tHow are you?") # 输出:Hello, world! How are you?
print("Hello,\b world!") # 输出:Hello world!
print("Hello,\f world!") # 输出:
# Hello,
# world!
print("A 对应的 ASCII 值为:", ord('A')) # 输出:A 对应的 ASCII 值为: 65
print("\x41 为 A 的 ASCII 代码") # 输出:A 为 A 的 ASCII 代码
decimal_number = 42
binary_number = bin(decimal_number) # 十进制转换为二进制
print('转换为二进制:', binary_number) # 转换为二进制: 0b101010
octal_number = oct(decimal_number) # 十进制转换为八进制
print('转换为八进制:', octal_number) # 转换为八进制: 0o52
hexadecimal_number = hex(decimal_number) # 十进制转换为十六进制
print('转换为十六进制:', hexadecimal_number) # 转换为十六进制: 0x2a
字符串运算符
下表实例变量 a 值为字符串 "Hello",b 变量值为 "Python":
| 操作符 | 描述 | 代码实例 & 运行效果 |
|---|---|---|
+ | 字符串连接 | a = "Hello"``b = "Python"``print(a + b)✅ HelloPython |
* | 重复输出字符串 | a = "Hello"``print(a * 2)✅ HelloHello |
[] | 通过索引获取字符 | a = "Hello"``print(a[1])✅ e |
[:] | 截取字符串(左闭右开) | a = "Hello"``print(a[1:4])✅ ell |
in | 成员运算符(包含返回 True) | a = "Hello"``print("H" in a)✅ True |
not in | 成员运算符(不包含返回 True) | a = "Hello"``print("M" not in a)✅ True |
r / R | 原始字符串(不转义) | print(r'\n')``print(R'\n')✅ \n \n |
% | 字符串格式化 |
#!/usr/bin/python3
a = "Hello"
b = "Python"
print("a + b 输出结果:", a + b) # HelloPython
print("a * 2 输出结果:", a * 2) # HelloHello
print("a[1] 输出结果:", a[1]) # e
print("a[1:4] 输出结果:", a[1:4]) # ell
if( "H" in a) :
print("H 在变量 a 中") # H 在变量 a 中
else :
print("H 不在变量 a 中")
if( "M" not in a) :
print("M 不在变量 a 中") # M 不在变量 a 中
else :
print("M 在变量 a 中")
print (r'\n')
print (R'\n')
字符串格式化
Python 支持格式化字符串的输出 。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符 %s 的字符串中。
在 Python 中,字符串格式化使用与 C 中 sprintf 函数一样的语法。
#!/usr/bin/python3
print ("我叫 %s 今年 %d 岁!" % ('小明', 10)) # 我叫 小明 今年 10 岁!
python字符串格式化符号:
| 符号 | 描述 | 实践示例 & 输出 |
|---|---|---|
%c | 格式化字符及其 ASCII 码 | print('%c' % 97) → a |
%s | 格式化字符串 | print('%s' % 'hello') → hello |
%d | 格式化整数 | print('%d' % 123) → 123 |
%u | 格式化无符号整型 | print('%u' % 123) → 123 |
%o | 格式化无符号八进制数 | print('%o' % 10) → 12 |
%x | 格式化无符号十六进制数 | print('%x' % 255) → ff |
%X | 大写十六进制数 | print('%X' % 255) → FF |
%f | 格式化浮点数 | print('%.2f' % 3.1415) → 3.14 |
%e | 科学计数法 | print('%e' % 3.1415) → 3.141500e+00 |
%E | 大写科学计数法 | print('%E' % 3.1415) → 3.141500E+00 |
%g | 自动简写浮点数 | print('%g' % 3.1415) → 3.1415 |
%G | 大写自动简写 | print('%G' % 3.1415) → 3.1415 |
%p | 变量地址(十六进制) | a=10``print('%p' % id(a)) → 内存地址 |
| 功能 | 老式 % 写法 | 现代 f-string 写法 | 输出结果 |
|---|---|---|---|
| 字符串 | '%s' % 'hello' | f'hello' 或 f'{s}' | hello |
| 整数 | '%d' % 123 | f'{123}' | 123 |
| 浮点数 | '%.2f' % 3.1415 | f'{3.1415:.2f}' | 3.14 |
| 字符 | '%c' % 65 | f'{chr(65)}' | A |
| 八进制 | '%o' % 10 | f'{10:o}' | 12 |
| 小写十六进制 | '%x' % 255 | f'{255:x}' | ff |
| 大写十六进制 | '%X' % 255 | f'{255:X}' | FF |
| 科学计数法 | '%e' % 0.00123 | f'{0.00123:e}' | 1.230000e-03 |
实践中推荐f-string【字面量格式化字符串】的写法
# 1. * 动态宽度、精度
print("* 动态宽度精度: %*.*f" % (10, 3, 1.23456))
# 2. - 左对齐
print("- 左对齐: [%-8s]" % "hello")
# 3. + 显示正号
print("+ 正号: %+d, %+d" % (100, -100))
# 4. 空格 正数前留空格
print("空格对齐: % d, % d" % (50, -50))
# 5. # 进制前缀
print("# 八进制: %#o" % 10)
print("# 十六进制: %#x, %#X" % (255, 255))
# 6. 0 填充
print("0 填充: %08d" % 123)
# 7. 输出 % 本身
print("百分号: 99%%")
# 8. (var) 字典变量
user = {"name": "张三", "age": 20}
print("字典映射: %(name)s 今年 %(age)d 岁" % user)
# 9. m.n 宽度+精度
print("m.n 格式: %10.2f" % 123.456)
* 动态宽度精度: 1.235
- 左对齐: [hello ]
+ 正号: +100,
-100 空格对齐: 50,
-50
# 八进制: 012
# 十六进制: 0xff,
0XFF 0 填充: 00000123
百分号: 99%
字典映射: 张三 今年 20 岁
m.n 格式: 123.46