08 python 数据类型|字符串

0 阅读5分钟

字符串是 Python 中最常用的数据类型。我们可以使用引号( ' 或 " )来创建字符串。

创建字符串很简单,只要为变量分配一个值即可。例如:

var1 = 'Hello World!'
var2 = "Runoob"

Python 访问字符串中的值

Python 不支持单字符类型,单字符在 Python 中也是作为一个字符串使用。

Python 访问子字符串,可以使用方括号 [] 来截取字符串,字符串的截取的语法格式如下:

变量[头下标:尾下标]

索引值以 0 为开始值,-1 为从末尾的开始位置。

123456-20200923-1.svg

python-str-runoob.png

#!/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")HelloWorld
\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' % 123f'{123}'123
浮点数'%.2f' % 3.1415f'{3.1415:.2f}'3.14
字符'%c' % 65f'{chr(65)}'A
八进制'%o' % 10f'{10:o}'12
小写十六进制'%x' % 255f'{255:x}'ff
大写十六进制'%X' % 255f'{255:X}'FF
科学计数法'%e' % 0.00123f'{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