day10 字符串总结

day10 字符串
一、字符串
(一)、
  1. 什么是字符串
1)字符串是容器型数据类型(能同时保存多个文字符号);
   将单引号、双引号或者是三个单引号或者三个双引号作为容器的标志,里面的每一个符号都是字符串中的元素

2)字符串不可变;字符串有序

3)字符串的元素:
  字符串引号中每一个独立的符号都是字符串的元素,字符串的元素又叫字符;
  任何文字符号都可以是字符串的元素(包括英文符号、中文符号、阿拉伯数字、语言、表情符号等等)

注意:空串(引号中有空格的时候不是空串)

str1 = ''
print(type(str1), len(str1))  # <class 'str'> 0
  1. 字符 —— 字符串中每一个独立的符号(字符串的元素)
字符串中的字符分为两种:普通字符、转义字符
1)普通字符  —— 在字符串中表示符号本身的字符就是普通字符
2)转义字符  —— 在字符串中有特殊意义或者特殊功能的符号就是转义字符(在特定的符号前加 \ 来表示特殊意义或者特殊功能)
    \n     —— 换行(相当于按回车)
    \t     —— 水平制表符(相当于按一次tab键)
    \\     —— 表示一个普通的反斜杠
    \'     —— 表示一个普通的单引号
    \"     —— 表示一个普通的双引号
注意:并不是所有的符号前加 \ 都会变成转义字符
  1. r字符串

在字符串的引号前面加 R 或者 r ,可以让字符串中所有的转义字符消失(让所有字符都变成纯字符)

str1 = r'nnn\\'   # 此处字符串前面的r表示这个字符串是个纯字符
print(str1)       # nnn\\
二、字符编码
计算机存储数据只能存数字(存的是数字的二进制补码)
(一)、字符编码
为了能让计算机存储文字符号,给每个符号对应了一个固定的数字,每次在需要存储这个符号的时候,就去存储这个固定的数字。
每个对应的那个数字就是这个符号的编码值。
(二)、编码表 —— 保存字符和字符编码值的表
1)ASCII码表
美国信息码(只包含了美国人常用的符号,总共128个)
数字字符
大写字母(A  - 65)
小写字母(a  - 97)
英文输入法下的特殊符号

2)Unicode编码表(Python) —— 包含了世界上所有国家所有民族所有的语言符号
Unicode编码表包含了ASCII (前128个字符就是ASCII表中的内容)
中文编码范围:4e00 ~ 9fa5
(三)、编码值的应用
  1. chr(编码值) —— 获取编码值对应的字符
# 中文编码值区间 —— 4e00 ~ 9fa5
# hex(10进制)  —— 获取指定数字对应的16进制表示方式
print(chr(97))   # 查看97编码值代表的a

# 打印所有中文
# for x in range(0x4e00, 0x9fa5+1):
#     print(chr(x))
  1. ord(字符) —— 获取指定字符对应的编码值、

注:字符指的是长度为1的字符串

# 案例:将char对应的小写字母转换成大写字码
char = 'm'
print(chr(ord(char) - 32 ))
  1. 编码字符:\u4位的16进制编码值
# 在字符串中提供字符的方式有两种:a.直接提供字符  b.使用编码字符
str1 = 'xv你好'
print(str1)   # xv你好

# 如果知道字符编码值是多少,但是不知道字符是什么的时候,就可以使用编码字符来表示这个字符
str2 = '\u0061'
print(str2)   # a
三、获取字符(查)
(一)、获取单个字符串
字符串[下标]
注意:转义字符的长度是1
str1 = '\nhello world!'
print(str1[5])  # O
(二)、字符串切片
字符串[开始下标:结束下标:步长]
str2 = 'good goog study!'
print(str2[1:-2:2])  # 切片获取odgo td
print(str2[-3:])     # dy!
(三)、遍历字符串
str2 = 'good goog study!'
for x in str2:
	print(x)

for x in range(len(str2))
	print(x,str[x])
	
for x,i in enumerate(str2):
	print(x,i)
四、字符串的相关操作
(一)、字符串加法运算
字符串1 + 字符串2  —— 将两个字符串合并成一个字符串
str1 = 'hello'
str2 = '你好'
print(str1 + str2) # hello你好
# 案例:提取字符串中所有的数字字符
str1 = 'xcvb1254fg'
new_str1 = ''
for x in str1:
	if '0' <= x <= '9':
		new_str1 += x
print(new_str1)

# 练习:将字符串中所有的数字字符都改成 +
str1 = '世界上89Kl22.9;;//sh66-==1'
# '世界上++Kl++.+;;//sh++-==+'
new_str1 = ''
for x in str1:
	if '0' <= x <= '9':
		new_str1 += '+'
	else:
		new_str1 += x
print(new_str1)
(二)、字符串乘法运算
字符串 * N 、 N * 字符串  —— 让字符串中的元素重复N次,产生一个新的字符串
str1 = 'a' * 10
print(str1)   # aaaaaaaaaa
(三)、字符串比较运算
  1. 比较是否相等
print('asd' == 'sda')  # False
  1. 比较大小
# 两个字符串比较大小比较的是第一段不相等的字符的编码值的大小
print('abc' > 'a123')   # True
print('acc' > '你好')    # False
判断字符的性质:
是否是数字字符: '0' <= x <= '9'
是否是小写字母: 'a' <= x <= 'z'
是否是大写字符: 'A' <= x <= 'Z'
是否是字符:'a' <= x <= 'z' or 'A' <= x <= 'Z'
是否是中文字符: '\u4e00' <= x <= '\u9fa5'
(四)、in 和 not in
字符串1 in 字符串2  —— 字符串1是否是字符串2的字串(字符串2是否包含在字符串1)
print('a' in 'abc')      # True
print('ab' in 'abc')     # True
print('ac' in 'abc')     # False
(五)、相关函数
  1. max、min、sorted
print(max('hello world')) # 求最大的字符'w'
print(sorted("shjahsja"))
  1. len(字符串)

注意:转义字符长度为1

msg = '\thello \nworld!'
print(len(msg))   # 长度为14
  1. str(数据) —— 任何类型的数据都可以转换成字符串;转换的时候是在数据的打印值外面加引号
str(100)     # '100'
  1. eval(字符串) —— 去掉字符串的引号,获取引号中表达式的结果
a = eval('100')  #  100
b = eval('1.23')  # 1.23

abc = 100
c = eval('abc')
print(c)         # 因为abc = 100,所以此处eval('abc')合法

a = "print('hello')"
eval(a)    # 可以获取到print('hello'),去掉了外面的引号
五、相关方法

字符串.xxx( )

  1. 字符串.join(序列) —— 将序列中的元素用指定的字符串连接成一个新的字符串(序列中的元素必须全部都是字符串)
list1 = ['小明', '张三', '李四', '王五']
result = '+'.join(list1)
print(result)   # 小明+张三+李四+王五
  1. 字符串1.count(字符串2) —— 统计字符串1中有多少个字符串2
msg = 'how are you? i am fine! thank you, and you?'
print(msg1.count('h'))  # 统计'h'在msg中出现的次数
print(result)           # 出现了2次
  1. 字符串切割
  • 字符串1.split(字符串2) —— 将字符串1中所有的字符串2作为切割点对字符串2进行切割

  • 字符串1.split(字符串2, N) —— 将字符串1中前N个字符串2作为切割点对字符串2进行切割

msg = 'how are you? i am fine! thank you, and you?'
result = msg.split('you')    # 遇到'you'就切割
print(result)   # ['how are ', '? i am fine! thank ', ', and ', '?']

result2 = msg.split(' ', 3)  # 将msg中前3个空格作为切割点对字符串 2进行切割
print(result2)    # ['how', 'are', 'you?', 'i am fine! thank you, and you?']

4.替换

  • 字符串1.replace(字符串2,字符串3) —— 将字符串1中所有的字符串2都替换成字符串3

  • 字符串1.replace(字符串2,字符串3, N) —— 将字符串1中前N个字符串2都替换成字符串3

msg = 'how are you? i am fine! thank you, and you?'
result = msg.replace('you', 'me')   # 所有的'you'替换成'me'
print(result)   # how are me? i am fine! thank me, and me?

msg = 'how are you? i am fine! thank you, and you?'
result = msg.replace('you', '+', 2)  # 将msg中前两个'you'替换成‘+’
print(result)   # how are +? i am fine! thank +, and you?
  1. 字符串.strip(去掉字符串前后的空白字符)
msg = """      'how are you? i am fine! thank you, and you?'
print(msg.strip())
  1. 字符串.isupper( ) —— 判断字符串是否是纯大写字母字符串
print('JHGBF'.isupper()) # True
  1. 字符串.islower( ) —— 判断字符串是否是纯小写字母字符串
print('xcb'.islower())   # True
  1. 字符串.isdigit( ) —— 判断字符或者字符串是否全是数字字符
print('123456'.isdigit())  # True
  1. 字符串.upper( ) ——将字符串中所有小写字母转换成大写字符
print('sfv'.upper)  # SFV

10.字符串.lower( ) —— 将字符串中所有大写字母都转换成小写字母

print('SFXGCHJB'.lower)  # sfxgchjb
六、格式字符串

解决的问题:字符串内容不确定

name = input('请输入学生的名字:')
age1 = int(input('请输入学生的年龄:'))
money = float(input('请输入月薪:'))
(一)、字符串拼接
# xxx今年xx岁,月薪:xxx元!
# 1.字符串拼接
msg = name + '今年' + str(age1) + '岁,月薪:' + str(money) + '元'
print(msg)
(二)、格式字符串 —— 包含格式占位符的字符串
1)语法:  包含格式占位符的字符串%(数据1,数据2,...)
2)注意:  ()中的数据必须和前面字符串中的占位符一一对应
3)常见的格式占位符:
%s    —— 可以给任何类型的数据占位
%d    —— 可以给任何数字占位(整数占位符:如果给的数字是小数,会自动转换成整数拼接到字符串中)
%f    —— 可以给任何数字占位(浮点数占位符:如果给的数字是整数,会自动转换成小数拼接到字符串中,默认保留6位小数)
%.Nf  —— 控制保留N位小数 —— 默认是保留6位小数
msg = '%s今年%s岁,月薪:%s元!' % (name, age1, money)
print(msg)

r = 'x:%.2f' % 3.1415
print(r)
(三)、f - string
在字符串的引号前面加f,就可以在字符串中通过{表达式}中表达式的结果来给字符串提供内容
a = 100
b = 20
# 'xxx + xx = xxx'
print(f'{a}+{b}={a+b}')  # 100+20=120

name = 's'
ming = 'x x'
print('姓:{}名{}'.format(name, ming))
  1. {表达式:.Nf} —— 控制小数保留位数
a = 1.23
b = 3.21565
print(f'{a:.2f}+{b:.2f}={a+b:.0f}')  #  1.23+3.22=4
  1. {表达式:.N%} ——控制数字显示成百分比,N控制百分比的小数位数
c = 0.98
print(f'及格率:{c:.0%}')  # 及格率:98%
  1. {表达式:,.Nf} —— 标准的金额拼接
d = 312656
print(f'¥{d:,.2f}')  # ¥312,656.00
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值