day2023-3-17-字符串

字符串

1.字符串

1)字符串是容器型数据类型(能同时保存多个文字符号);
将单引号、双引号或者三个单引号、三个双引号作为容器的标志,
里面的每一个符号都是字符串中的元素
2)字符串是不可变的;字符串是有序的
3)字符串的元素:
字符串引号中每一个独立的符号都是字符串的元素,字符串的元素又叫字符;
任何文字符号都可以是字符串的元素(包括英文符号、中文符号、阿拉伯数字、韩语、日语、表情符号、……)

str1 = 'lisa'
str2 = "lisa"
str3 = '''lisa'''
str4 = """lisa"""

msg = '床前明月光,' \
      '疑是地上霜。'
print(msg)     # 床前明月光,疑是地上霜。

msg = '''窗前明月光,
疑是地上霜'''
print(msg)
"""
窗前明月光,
疑是地上霜
"""
print('嘿嘿😀生气🤯开心😊')

str4 = "it's me"
str5 = 'it\'s me'
print(str4)   # it's me
print(str5)   # it's me

str9 = '\\nabc'  # \nabc
print(str9)

# 空串 —— 引号中没有任何符号的字符串(引号中有空格的时候不是空串)
str6 = ''
print(type(str6), len(str6))

2.字符 —— 字符串中每一个独立的符号(字符串的元素)

字符串中的字符分为两种:普通字符、转义字符
1)普通字符 —— 在字符串中表示符号本身的字符就是普通字符
2)转义字符 —— 在字符串中有特殊意义或者特殊功能的符号就是转义字符(在特定的符号前加 \ 来表示特殊意义或者特殊功能)
\n —— 换行(相当于按回车)
\t —— 水平制表符(相当于按一次tab键)
’ —— 表示一个普通的单引号
" —— 表示一个普通的双引号
\ —— 表示一个普通的反斜杠

str1 = 'abc123'
print(str1)

# 并不是所有的符号前加 \ 都会变成转义字符
str2 = '\m\h'
print(str2)

str2 = '\tabc\n123h'
print(str2)

3. r字符串

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

str1 = r'\tabc\n123'
print(str1)     # \tabc\n123

str1 = 'R\tabc\n123'
print(str1)     # \tabc\n123

4.字符编码

计算机存储数据只能存数字(存的是数字的二进制补码)

1)字符编码

为了能够让计算机存储文字符号,给每个符号对应了一个固定的数字,每次在需要存储这个符号的时候,就去存储这个固定的数字。
每个对应的那个数字就是这个符号的编码值。

2)编码表 —— 保存字符和字对应的编码值的表

1)ASCII码表
美国信息码(只包含了美国人常用的符号,总共128个)
数字字符
大写字母(A-65)
小写字母(a-97)
英文输入法下的特殊字符

2)Unicode编码表(python)—— 包含了世界上所有国家所有民族的所有的语言符号
Unicode编码表包含了ASCII(前128个字符就是ASCII码表中的内容)
中文编码范围:4e00 ~ 9fa5

3)编码值的使用

a. chr(编码值) —— 获取编码值对应的字符

print(chr(97))      # a
print(chr(0x4e00))  # 一
print(chr(0x9fa5))  # 龥

from pypinyin import pinyin
print(pinyin('龥'))

for x in range(0x4e00, 0x9fa5 + 1):
    print(chr(x), pinyin(chr(x)), end='')

for x in range(0x1100, 0x11ff+1):
    print(chr(x), end='')

b. ord(字符) —— 获取指定字符对应的编码值

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

print(ord('a'))   # 97
print(ord('任'))  # 20219

小写字母和大写字母编码值相差32
a: 97 A: 65
b: 98 B: 66

# 案例:将char对应的小写字母转换成大写字母
char = 'm'
print(chr(ord(char) - 32))     # M

c. 编码字符:\u 4位的16进制编码值

在字符串中提供字符的方式有两种:a.直接提供字符 b.使用编码字符

# hex(10进制数) —— 获取指定数字对应的16进制表达方式
str1 = 'ab你好'
print(str1)

# 如果知道字符的编码值是多少,但是不知道字符是什么的时候,就可以使用编码值来表示这个字符
str2 = '\u0061\u9fa5'
print(str2)

char = '你'
if '一' <= char <= '\u9fa5':
    print(char, '是中文字符')
else:
    print(char, '不是中文字符')

5.查 —— 获取字符

字符串获取字符的方法和列表获取元素的方法一样

1)获取单个字符

字符串[下标]

注意:转义的长度是1

str1 = '\thello\nworld!\u9fa5'
print(str1[5])       # o
print(str1[-1])      # 龥

2)字符串切片

字符串[开始下标:结束下标:步长]

str1 = 'lisa is a beautiful girl.'
print(str1[1:-2:2])     # 'iai  euiu i'
print(str1[-3:])        # 'rl.'

3)遍历字符串

for x in str1:
    print(x)
for index in range(len(str1)):
    print(str1[index])
for index, item in enumerate(str1):
    print(index,item)

6.字符串相关操作

1)字符串加法运算 —— 字符串拼接

字符串1 + 字符串2 —— 将两个字符串合并成一个字符串

str1 = 'hello'
str2 = '你好'
print(str1 + str2)    # hello你好
print(str1 + ' ' + str2)     # hello 你好

# 案例1:提取字符串中所有数字字符
str1 = '\(@^0^@)/你好12334hello7865咯89'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += x
print(new_str)      # 012334786589

# 案例2:在每一个数字字符后面插入一个%
str1 = '\(@^0^@)/你好12334hello7865咯89'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += x + '%'
    else:
        new_str += x
print(new_str)     # \(@^0%^@)/你好1%2%3%3%4%hello7%8%6%5%咯8%9%

# 练习:将字符串中所有的数字字符都改成 +
str1 = '\(@^0^@)/你好12334hello7865咯89'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += '+'
    else:
        new_str += x
print(new_str)     # \(@^+^@)/你好+++++hello++++咯++

2)字符串乘法运算

字符串 * N、N * 字符串 —— 将字符串中的元素重复N次产生一个新的字符串

str1 = 'hello'
print(str1 * 3)   # hellohellohello

3)字符串比较运算

a. 比较是否相等:==、!=

print('abc' == 'bac')  # False

b.比较大小:两个字符串比较大小,比较的是第一对不相等的字符的编码值的大小

判断字符的性质:
是否是数字字符:'0' <= x <= '9'
是否是小写字母:'a' <= x <= 'z'
是否是大写字母:'A' <= x <= 'Z'
判断x是否是字母:'a' <= x <= 'z' or 'A' <= x <= 'Z'
是否是中文:'\u4e00' <= x <= '\u9fa5'
print('abc' > 'bcc')   # 'a' > 'b' False
print('a1mn' > 'abc')  # '1' > 'b' False
print('a你好' > 'acc')  # '你' > 'b' True

4)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

5)相关函数

a. maxminsorted

print(max('helloworld'))   # w
print(sorted('hello world!'))  # [' ', '!', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']

b. len(字符串)

msg = 'hello world!'
print(len(msg))     # 12
msg = '\thello\nworld!\u4e00'
print(len(msg))     # 14

c. str(数据)

任何类型的数据都可以转换成字符串;转换的时候是在数据的打印值外面加引号

str(100)  # '100'
str(1.23)   # '1.23'
str(True)   # 'True'

list1 = [1, 2, 3]
str(list1)   # '[1, 2, 3]'

list2 = [1,2,3]
print(list2)    # [1, 2, 3]
str(list2)   # '[1, 2, 3]'

list3 = ["lisa", 20]
print(list3)    # ['lisa', 20]
str(list3)      # "['lisa', 20]"

d. eval(字符串)

a = eval('100')    # a = 100
b = eval('1.23')   # b = 1.23

abc = 100
c = eval('abc')    # c = abc

d = eval('"hello"')   # d = "hello"
print(d)              # hello

a1 = eval('[10, 20, 30]')   # a1 = [10, 20, 30]
print(a1)
a1.append(100)
print(a1)    # [10, 20, 30, 100]

b1 = eval('10 + 20')   # b1 = 10 + 20
print(b1)    # 30

msg = 'print(100)'
eval(msg)    # 100

a = int(input('请输入数字a的值:'))
b = int(input('请输入数字a的值:'))
value = input('请选择运算符(+、-、*、/):')
result = eval(f'a{value}b')
print(result)

7.字符串相关方法

字符串.xxx()

1)字符串.join()

将序列中的元素用指定的字符串连接成一个新的字符串(序列中的元素必须全部都是字符串)

list1 = ['lisa', 'Bob', 'Jenny', 'Ocean']
result = '+'.join(list1)
print(result)    # lisa+Bob+Jenny+Ocean

result = '**'.join('abc')
print(result)    # a**b**c

nums = [10, 20, 30]   # nums中的元素不是字符串,所以需要将nums中的元素转换成字符串
# 需要得到: '10 + 20 + 30'
result = ' + '.join([str(x) for x in nums])
print(result)    # 10 + 20 + 30

2)字符串1.count(字符串2)

统计字符串1中字符串2的个数

msg = 'how are you? I am fine. Thank you, and you?'
result = msg.count('a')
print(result)     # 4
print(msg.count('you'))   # 3

3)字符串.split()

a.字符串1.split(字符串2) —— 将字符串1中所有的字符串2作为切割点对字符串1进行切割

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

msg = 'how are you? I am fine. Thank you, and you?'
result = msg.split('you')
print(result)     # ['how are ', '? I am fine. Thank ', ', and ', '?']

result = msg.split('you')
print(result)     # ['how are ', '? I am fine. Thank ', ', and ', '?']

date = '2020/6/5'
print(date.split('/'))     # ['2020', '6', '5']

result = msg.split(' ', 3)
print(result)      # ['how', 'are', 'you?', 'I am fine. Thank you, and you?']

4)字符串.replace()

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

b.字符串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')
print(result)    # how are me? I am fine. Thank me, and me?

result = msg.replace('you', '')
print(result)    # how are ? I am fine. Thank , and ?

result = msg.replace('you', '+', 2)
print(result)    # how are +? I am fine. Thank +, and you?

5)字符串.strip()

去掉字符串前后的空白字符

msg = """

how are you? I am fine. Thank you, and you?

"""
print(msg)
print(msg.strip())    # how are you? I am fine. Thank you, and you?

# 也可以去掉前后的字符串
msg = '//li/sa'
print(msg.strip('/'))   # li/sa

6)字符串.isupper()

字符串.isupper() —— 判断字符串是否是纯大写字母字符串

字符.isupper() —— 判断字符是否是大写字母

print('JKSR'.isupper())   # True
print('A'.isupper())      # True

7)字符串.islower()

判断字符串是否是纯小写字母字符串

print('lsacA'.islower())    # False

8)字符串.isdigit()

判断字符串是否是数字字符

print('9'.isdigit())      # True

9)字符串.upper()

将小写字母转换成大写字母

print('hs你啊JJS'.upper())     # HS你啊JJS

10)字符串.lower()

将大写字母转换成小写字母

print('hs你啊JJS'.lower())     # hs你啊jjs
# 案例:判断char是否是字母
char = 's'
if char.islower() or char.isupper():
    print('是字母')
else:
    print('不是字母')

8.格式字符串

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

# name = input('请输入学生的名字:')
name = 'lisa'
# age = input('请输入学生的年龄:')
age = 20
# money = float(input('请输入你的月薪:'))
money = 80000

1)字符串拼接

msg = name + '今年' + str(age) + '岁,月薪' + str(money) + '元!'
print(msg)

2)格式字符串

包含格式占位符的字符串

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

print('x:%d' % 6.921)    # x:6

print('x:%f' % 21)       # x:21.000000
print('x:%f' % 3.1415)   # x:3.141500

print('x:%.2f' % 10)    # x:10.00

3)f-string

在字符串的最前面(引号的前面)加f,就可以在字符串中通过{表达式}中表达式的结果来给字符串提供内容

msg = f'{name}今年{age}岁,月薪:{money}元'
print(msg)

a = 100
b = 200
print(f'{a} + {b} = {a+b}')    # 100 + 200 = 300

a.{表达式:.Nf} —— 控制小数保留N位小数

a = 1.23
b = 2.2367
print(f'{a} + {b} = {a+b}')           # 1.23 + 2.2367 = 3.4667
print(f'{a:.2f} + {b:.2f} = {a+b:.0f}')     # 1.23 + 2.24 = 3

b.{表达式:.N%} —— 控制数字显示成百分比,N值是指百分比的小数位数

c = 0.98
print(f'及格率:{c:.2%}')    # 及格率:98.00%

c.{表达式:,.Nf} —— 标准的金额拼接

# 372800 -> 372,800
d = 372800
print(f'¥{d:,.2f}')    # ¥372,800.00
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值