【总结】字符串

字符串

1.字符串

1.1 什么是字符串(str)

  • 字符串是容器型数据类型(能同时保存多个文字符号);将单引号、双引号或者三个单引号或者三个双引号作为容器标志;

  • 字符串不可变;字符串有序

  • 字符串的元素:

    a. 字符串引号没一个独立的符号都是字符串的元素,字符串的元素又叫字符;

    b. 任何文字字符都开始独立的字符串元素(摆阔英文符号、中文符号、阿拉伯数字、汉语、日语、 …、表情符号等)

str1 = '小明'
str2 = "小明"
str3 = '''小明'''
str4 = """小明"""

msg = '床前明月光,' \
      '凝视地上霜'
msg1 = '床前明月光,\n凝视地上霜'
msg2 = '''床前明月光,
凝视地上霜。'''
print(msg)
print(msg2)
print(msg1)
img

1)空串 - 引号中没有任何符号的字符串(引号中有空格的时候不是空串)

str6 = ''
print(type(str6), len(str6))        # <class 'str'> 0

1.2 字符 - 字符串没一个独立的符号(字符串的元素)

字符串中的字符分为两种:普通字符、转义字符

1)普通字符 - 在字符串中表示符号本身的字符就是普通字符串

2)转义字符 - 在字符串中有特殊意义或者特殊功能的符号就是转义字符;(在特定符号前加 \ 来表示特殊意义或者特殊功能)

\n    -     换行
\t    -     水平制表符(相当于tab键)
\'    -     表示一个普通的单引号
\"    -     表示一个普通的双引号
\\    -     表示一个普通的反斜杠
str1 = 'avf你好123!'
print(str1)       # avf你好123!

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

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

# 表示 it's ok!
str3 = 'it\'s ok!'
str4 = "it's ok!"
print(str3, str4)

# 表示 I say "good good study!"
str5 = 'I say "good good study!"'
str6 = "I say \"good good study!\""
print(str6)

# 表示abc\n123
str7 = 'abcn123'  # abcn123
str8 = 'abc\n123'       # 会换行
str9 = 'abc\\n123'
print(str9)       # abc\n123

path = 'E:\name\python\text\b.txt'
print(path)       # ame\python ex.txt
path1 = 'E:\\name\\python\\text\\b.txt'
print(path1)      # E:\name\python\text\b.txt

1.3 r字符串

  • 在字符串的引号前面加 r 或者 R,可以让字符串中所有的字符功能消失(让所有字符串都变成普通字符串)
str1 = r'\tab\n123'
print(str1)       # \tab\n123

path = R'E:\name\python\text\b.txt'
print(path)       # E:\name\python\text\b.txt

2. 字符编码

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

2.1 字符编码

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

​ 每个对应的那个数字就是这个符号的编码值。

2.2 编码表 - 保存字符和字符对应的编码表

1)ASCII码表

​ 美国信息码。(只包含了美国人常用的符号,共128个)

​ a. 数字字符

​ b. 大写字母(A - 65)

​ c. 小写字母(a - 97)

​ d. 英文输入法下的特殊符号

2)Unicodde编码表(python) - 包含了世界上多有国家所有民族所有语言符号

  • Unicode编码表包含了ASCII(前128个字符就是ASCII表的内容)
  • 中文编码范围:4e00 - 9fa5(16进制)

2.3 编码值的使用

1)chr(编码值) - 获取编码值对应的字符

print(chr(97))      # a
print(chr(0x4e00))      # 一
print(chr(0x9af5))      # 髵

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

2)ord() - 获取指定字符对应的编码值

  • 注意:字符指的是长度为1的字符串
print(ord('a'))     # 97
print(ord('A'))     # 65
print(ord('余'))     # 20313
print(ord('1'))     # 49

案例:大小写字母转换

char = 'm'
print(chr(ord(char) - 32))    # M
print(chr(ord('G') + 32))       # g

3)编码字符:\u4位的16进制编码值

  • hex(x进制) - 获取指定数字对应的16进制表示方法

  • 在字符串中提供字符的方式有两种:

    • 直接提供字符

      str1 = 'ab你好'
      print(hex(97))      # 0x61
      
    • 使用编码字符

      如果知道字符的编码值是多少,但是不知道字符是什么的时候,就可以使用编码字符来表示这个字符

      str2 = '\u0061'
      print(str2)     # a
      
      # 判断是否是中文字符
      char = '数'
      if '一' <= char <= '\u9af5':
          print(char, '是中文字符')
      else:
          print(char, '不是中文字符')
      

3. 字符串的操作

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

3.1 获取单个字符

  • 字符串[下标]

  • 注意:转义字符的长度是1

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

3.2 字符串切片

  • 字符串[开始下标:结束下标:步长]
str1 = 'good good study!'
print(str1[1:-2:2])     # 'odgo td'
print(str1[-3:])        # 'dy!'

3.3 遍历字符串

for x in str1:
    print(x)

print('------------------------------华丽分割线-----------------------------')
for index in range(len(str1)):
    print(index, str1[index])

print('------------------------------华丽分割线-----------------------------')

for index, item in enumerate(str1):
    print(index, item)

4. 字符串相关操作

4.1 字符串加法运算 - 字符串拼接

  • 字符串1 + 字符串2 - 将两个字符串合并成一个字符串
str1 = 'hello'
str2 = '你好'
print(str1 + str2)          # hello你好
print(str1 + ' ' + str2)    # hello 你好
# 案例1: 提取字符串中所有的数字字符
str1 = '时候速度903u48vog;e=-e5!'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += x
print(new_str)      # 903485

# 案例2: 在每一个数字后面加一个%
str1 = '时候速度903u48vog;e=-e5!'
new_str = ''
for x in str1:
    if not '0' <= x <= '9':
        new_str += x
    else:
        new_str += x
        new_str += '%'
print(new_str)      # 时候速度9%0%3%u4%8%vog;e=-e5%!

# 练习: 将字符串中所有数字字符都改成‘+’
str1 = '时候速度903u48vog;e=-e5!'
new_str = ''
for x in str1:
    if not '0' <= x <= '9':
        new_str += x
    else:
        new_str += '+'
print(new_str)      # 时候速度+++u++vog;e=-e+!

4.2 字符串乘法运算

  • 字符串 * N、N * 字符串 - 让字符串中的元素重复N次产生一个新的字符串
str1 = 'a' * 5
print(str1)     # aaaaa

str2 = '你好!' * 2
print(str2)     # 你好!你好!

4.3 字符串比较运算

1)比较运算符: ==、!=

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

2)比较大小

  • 两个字符串比较大小,比较大时第一对不相等的字符的编码大小

判断字符的性质:

  • 是否是数字字符:‘0’ <= x <= ‘9’
  • 判断是否是小写字母:‘a’ <= x <= ‘z’
  • 判断是否是大写字母:‘A’ <= x <= ‘Z’
  • 判断是否是字母:‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’
  • 是否是中文汉子:‘一’ <= x <= ‘\u9fa5’
print('abc' > 'aac')        # True
print('a1mn' > 'abmn')      # False
print('a你好' > 'abc')        # True

4.4 in 和 not in

  • 字符串1 in 字符串2 - 字符串1是否是字符串2的字串(字符串2是都包含字符串2)
print('a' in 'abc')     # True
print('ab' in 'abc')    # True
print('ac' in 'abc')    # False

4.5 相关函数

1)max、min、sorted

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

2)len(字符串)

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

3)str(数据) - 任何类型数据都可以转换乘字符串;转换到时候是在数据的打印值外面加引号

str(122)    # '122'
str(1.23)   # '1.23'
str(True)   # 'True'
list1 = ["小明",18,'男']
str(list1)      # "['小明', 18, '男']"

4)eval(字符串) - 去掉字符串的引号获取引号中表达式的结果

eval('100')     # 100
eval('1.23')    # 1.23
# eval('abc')   # 去掉引号的abc不合规,会报错
# 但可以提前定义abc
abc = 100
eval('abc')
eval('"hello"')     # "hello"

b1 = eval('10 + 20')    # 30
a = int(input('输入a:'))
b = int(input('输入b:'))
value = input('选择运算符(+、-、*、/):')
result = eval('a'+ value + 'b')
print(result)

5. 字符串相关方法

字符串.xxx()

5.1字符串.join(序列)

  • 将序列中的元素用指定字符串连接成一个新的字符串(序列中的元素必须全市字符串)
list1 = ['小明', '张三', '李四', '王五']

result = '+'.join(list1)
print(result)       # 小明+张三+李四+王五

result = ' and '.join(list1)
print(result)       # 小明 and 张三 and 李四 and 王五

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

nums = [90, 98, 78, 86]
# '90'+'98'+'78'+'86'
result = '+'.join([str(x) for x in nums])
print(result)

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

  • 统计字符串1中字符串2的个数
# 统计you出现次数
msg = 'how are you? i am fine! thank you, and you?'
result = msg.count('you')
print(result)       # 3

result = msg.count('a')
print(result)       # 3

5.3 字符串.split()

  • 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割垫对字符串1进行切割
  • 字符串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(' ')
print(result)       # ['how', 'are', 'you?', 'i', 'am', 'fine!', 'thank', 'you,', 'and', 'you?']

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

5.4 字符串.replace()

  • 字符串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', 'xx')
print(result)       # how are xx? i am fine! thank xx, and xx?

result = msg.replace('you', '', 2)
print(result)       # how are ? i am fine! thank , and you?

5.5 字符串.strip() - 去掉字符串前后空白字符

msg = '         how are you? i am fine! thank you, and you?    '
result = msg.strip()
print(msg)
print(result)
msg = '/小//明//'
result = msg.strip('/')
print(result)       # 小//明

5.6 字符串.isupper()

  • 字符串.isupper() - 判断字符串是否是纯大写字母字符串
  • 字符.isupper() - 判断字符是否是纯大写字母字符串
print('HOAN'.isupper())     # True
print('D'.isupper())        # True
print('d'.isupper())        # False

5.7 字符串.islower()

  • 判断字符串是否是纯小写字母字符串
print('ibsbdbv'.islower())  # False

5.8 字符串.isdigit()

  • 判断字符串是否是全是数字字符
print('9039'.isdigit())		# True

5.9 字符串.upper()

  • 将小写字母转化为大写字母
print('diob奇偶比是894jd'.upper())      # DIOB奇偶比是894JD
print('m'.upper())                      # M

5.10 字符串.lower()

  • 将大写字母转化为小写字母
print('J'.lower())      # j
print('HO78fi'.lower())     # ho78fi

6. 格式字符串

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

name = input('请输入姓名:')
age = int(input('请输入年龄:'))
money = float(input('输入月薪:'))

6.1 字符串拼接

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

6.2 格式字符串 - 包含格式占位符的字符串

1)语法:包含格式占位符的字符串 % (数据, 数据2, 数据3, …)

2)注意:后面括号中数据必须和前面字符串中占位符一一对应

3)常见格式占位符:

%s      -   可以给任何类型数据占位
%d      -   可以给任何数字占位(整数占位符,如果给的是小数,会自动转换成整数再拼接上去)
%f      -   可以给任何数字占位(浮点数占位符,且保留6位小数)
%.Nf    -   控制保留N位小数
msg = '%s今年%s岁,月薪;%.2f元!' % (name, age, money)
print(msg)

result = 'x: %s%s' % (10.2, 'm')
print(result)       # x: 10.2df

result = 'x: %d' % 10.2
print(result)       # x: 10

result = 'x: %.2f' % 10.7777
print(result)       # x: 10.78

6.3 f-string

  • 在字符串的最前面(引号的前面)加f,就可以在字符串中通过{表达式}中表达式的结果来给字符串提供内容
msg = f'{name}今年{age}岁,月薪:{money}元!'
print(msg)      # 张三今年22岁,月薪:10000元!

1){表达式.Nf} - 控制保留N位小数

a = 100.345
b = 20.76
# 'xxx + xx = xxx'
print(f'{a} + {b} = {a+b}')     # 100.345 + 20.76 = 121.105
print(f'{a:.0f} + {b:.2f} = {a+b:.2f}')     # 100 + 20.76 = 121.11

2){表达式.N%} - 控制数字显示成百分比,N控制百分比学校数位数

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

3){表达式:.Nf} - 标准金额拼接

# 236800  --> ¥236,800.00
d = 236860067800
print(f'余额:¥{d:,.2f}')

4)在表达式前后填充指定字符
{表达式:符号>N}、{表达式:符号<N}、{表达式:符号^N}

x = 'abc'
result = f'{x:0>7}'
print(result)       # 0000abc

result = f'{x:0<7}'
print(result)       # abc0000

result = f'{x:0^7}'
print(result)       # 00abc00

result = f'{x:^7}'
print(result)       #   abc

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值