字符串知识

字符串

1.什么是字符串(str)

1)字符串是容器型数据类型(能同时保存多个文字符号);将单引号、双引号或者三个单引号、三个双引号作为容器的标志,里面的每一个符号都是字符串中的元素(单引号和双引号不可以直接换行,要在需换行处加上转义字符\n)

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

3)字符串的元素:

​ 字符串引号中每一个独立的符号都是字符串的元素,字符串的元素又叫字符;

​ 任何文字符号都可以是字符串的元素(包括英文符号、中文符号、阿拉伯数字、表情符号、韩语、日语…)

空串: 引号中没有任何符号的字符串(引号中有空格的时候不是空串) 字符串里面啥也没有,长度为0。

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

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

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

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

```python
\n  -  换行(相当于按回车)
\t  -  水平制表符(相当于按一次Tab键)
\'  -  表示一个普通的单引号
\"  -  表示一个普通的双引号
\\  -  表示一个普通的反斜杠
```
3.r字符串

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

字符串编码

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

1.字符编码

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

2.编码表 - 保存字符和字符对应编码值的表

1)ASCII表

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

2)Unicode编码表(Python) - 包含了世界上所有的国家所有的民族的所有的语言符号

​ Unicode编码包含了ASCII(前128个字符就是ASCII表中的内容)

​ 中文编码范围:4e00 ~ 9fa5 (十六进制 前面要加 0x)

3.编码值的应用

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

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

for x in range(0x4e00,0x9fa5):
    print(chr(x),end='') # 打印Unicode编码表中的中文字符
```

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

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

```python
print(ord('a')) # 97
print(ord('青')) # 38738
```

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

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

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

hex(10进制数) - 获取指定数字对应的16进制表示方式

```python
str1 = 'ab你好'
print(str1) # ab你好
```

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

```python
str2 = '\u0061\u9fa5'
print(str2) # a龥
```

```python
char = 'j'
if '\u4e00' <= char <= '\u9fa5':
    print(char,'是中文字符')
else:
    print(char, '不是中文字符')
# j 不是中文字符
```

获取字符串

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

1.获取单个字符

字符串[下标]

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

2.字符串切片

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

```python
str1 = 'good good study!'
print(str1[1:-2:2]) # odgo td
print(str1[-3:]) # dy!
```
3.遍历字符串
```python
for x in str1:
    print(x)
for index in range(len(str1)):
    print(index,str1[index])
for index,item in enumerate(str1):
    print(index,item)
```

字符串的操作

1.字符串加法运算

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

```python
str1 = 'hello'
str2 = 'world'
print(str1 + str2) # helloworld
print(str1 + ' ' + str2) #  hello world
```

```python
# 案例1:提取字符串中所有数字字符
str1 = 'shijie毒素U盾从234.//;=-='
new_str1 =''
for x in str1:
    if '0'<=x<='9':
        new_str1 +=x
print(new_str1) # 234


# 案例2:在每一个数字字符后面插入一个 %
str1 = 'shijie毒素U盾从234.//;=-='
new_str1 = ''
for x in str1:
    if '0'<=x<='9':
        new_str1 +=x + '%'
    else:
        new_str1 +=x
print(new_str1) # shijie毒素U盾从2%3%4%.//;=-=


# 练习:将字符串中所有的数字字符都改成 +
str1 = '世界上89Kl22.9;;//sh66-==1'
new_str1 = ''
for x in str1:
    if '0'<=x<='9':
        new_str1 += '+'
    else:
        new_str1 +=x
print(new_str1) # '世界上++Kl++.+;;//sh++-==+'
```
2.字符串乘法运算

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

3.字符串比较运算

1)比较是否相等: ==、!=

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

2)比较大小

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

判断字符的性质:

是否是数字字符:‘0’ <= x <= ‘9’

是否是小写字母:‘a’ <= x <= ‘z’

是否是大写字母:‘A’ <= x <= ‘Z’

是否是字母:‘a’ <= x <= ‘z’ or ‘A’ <= x <= ‘Z’

是否是中文:‘\u4e00’ <= x <= ‘\u9fa5’

```python
print('abc'>'bbc') # False
print('a1mn'>'abc') # False
print('a你好'>'abc') # True
```
4.in 和 not in

字符串1 in字符串2 - 字符串1是否是字符串2的子串(字符串2是否包含字符串1)

```python
print('a' in 'abc') # True
print('ab' in 'abc') # True
print('ac' in 'abc') # False
print(10 in [10,20,30]) # True
print([10,20]in [10,20,30])  # False
```
5.相关函数

1)max、min、sorted

```python
print(max('helloworld')) # w
print(sorted('helloworld')) # ['d', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
```

2)len(字符串)

```python
msg = 'hello world!'
print(len(msg)) # 12
msg = '\tello world!\u4e00'
print(len(msg)) # 13
```

3)str

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

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

```py
a =eval('123')  # a = 123
print(a) # 123
b =eval('"hello world"') # d = "hello world"
print(b)  # hello world
c = eval('[10,20,30]')
print(c) # [10, 20, 30]
msg = 'print(100)'
eval(msg) # 打印100
```

```python
x = int(input('请输入数据1:'))
y = int(input('请输入数据2:'))
value = input('请输入运算符号(+、-、*、/):')
result = eval('x' + value + 'y')
print(result)

请输入数据1:10
请输入数据2:20
请输入运算符号(+、-、*、/):+
30
```

字符串相关方法

字符串.xxx()

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

```python
list1 = ['小明','张三','李四','王五']
result = '+'.join(list1)
print(result) # 小明+张三+李四+王五
result = '**'.join('abc')
print(result) # a**b**c

nums = [90,78,67,45,23]
result = '+'.join([str(x)for x in nums])
print(result) # 90+78+67+45+23
print(eval((result))) # 303
```

2.字符串1.count(字符串2) - 统计字符串1中字符串2的个数

```python
msg = 'how are you? i am fine! thank you, and you?'
result = msg.count('a')
print(result)  # 4
print(msg.count('you'))  # 3
```

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

```python
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?']

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

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

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

```python
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', '')  # 相当于删除字符串中的'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() - 去掉字符串前后的空白字符(空格、换行、缩进),中间的空格不管

```python
msg = '    asasa   '
print(msg.strip()) # asasa
msg = '//asads//'
print(msg.strip('/'))  # asads
```

6.

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

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

7.字符串.islower() - 判断字符或者字符串是否全是小写字母

8.字符串.isdigit() - 判断字符或者字符串是否全是数字字符

9.字符串.upper() - 将字符或者字符串中的小写字母转换成大写字母

10.字符串.lower() - 将字符或者字符串中的大写字母转换成小写字母

```python
char = 'a'
if  char.islower() or char.isupper():
    print('是字母')
else:
    print('不是字母')
```

格式字符串

解决的问题:字符串内容不确定
```python
name = input('请输入学生的名字:')
age = int(input('请输入学生的年龄:'))
money = float(input('请输入你的月薪:'))
# xxx今年xx岁!
```

1.字符串拼接

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

2.格式字符串 - 包含格式占位符的字符串

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

​ 2)注意:()中的数据必须和前面字符串中的占位符一一对应

​ 3)常见的格式占位符:

%s - 可以给任何类型的数据占位(数据原样拼接到字符串中)

%d - 可以给任何数字占位(整数占位符,如果给的数字是小数,会自动转换成整数再拼接到字符串中)

%f - 可以给任何数字占位(浮点数占位符,默认保留六位小数)

%.Nf - 控制保留N位小数

```python
msg = '%s今年%s岁,月薪:%s元!' % (name,age,money)
print(msg)
```

3.f-string

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

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

```python
a = 100
b = 20
print(f'{a} + {b} = {a + b}')  # 100 + 20 = 120
a = 1.234
b = 2.3
print(f'{a:.2f} + {b:.2f} = {a + b:.0f}') # 1.23 + 2.30 = 4
```

{表达式:.N%} - 控制数字显示成百分比,N控制百分比的小数位数

```python
c = 0.98
print(f'及格率:{c:.0%}') # 及格率:98%
```

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

```pascal
# 357800 -> ¥357,800.00
d = 357800
print(f'¥{d:,.2f}')
```
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值