day10-Python-字符串

Python-字符串

一.字符串

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

2)字符不可变的(所有可变都是通过创建新的字符串实现的),字符串有序

3)字符串的元素:
  字符串引号中每一个独立的符号都是字符串的元素,字符串的元素又叫字符;
  任何文字符号都可以做字符串的元素(包括英文符号、中文符号、阿拉伯数字、韩语...)
"""
str1 = '小明'
str2 = "小明"
str3 = """小明"""
str4 = '''小明'''
msg = '床前明月光,\n疑是地上霜。'

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

str5 = 'mK,.?换手》?123😊'
print(str5)
# def func1():
#     """xxxx"""
#     """hello world"""
#
# class A:
#     '''xxxx'''
#     '''hello world'''
空串 - 引号中不能有任何符号的字符串(引号中不包含空格)
str6 = ' '
print(type(str6), len(str6))  # <class 'str'> 1
2.字符 - 字符串中每一个独立的符号
"""
字符串中的字符分为两种:分别是普通字符和转义字符
1)普通字符 - 在字符串中表示符号本身的字符就是普通字符
2)转义字符 - 在字符串中有特殊意义或者特殊功能的符号就是转义字符(在特定的符号前加\来表示特殊意义或者特殊功能)
  \n  -  换行(相当于按回车)
  \t  -  水平制表符(相当于按Tab)
  \'  -  表示一个普通的单引号
  \"  -  表示一个普通的双引号
  \\  -  表示一个普通的反斜杠
"""
str1 = 'abc你好!'
print(str1)  # abc你好!
并不是所有的符号前加\都会变成转义字符
str2 = '\m\h'
print(str2)  # \m\h

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

# str3 = 'it's ok!'  # 报错
str4 = 'it\'s ok!'
print(str4)  # it's ok!

# str5 = "i say:"good good study!""  # 报错
str5 = "i say:\"good good study!\""
print(str5)  # i say:"good good study!"

str6 = 'abc\n123'
print(str6)
str6 = 'abc\\n123'
print(str6)  # abc\n123

path = 'C:\names\proms\python\a.txt'
print(path)  # ames\proms\python.txt

path = 'C:\\names\\proms\\python\\a.txt'
print(path)  # C:\names\proms\python\a.txt
3.r字符串
在字符串中的引号前面加r或者R,可以让字符串中所有的转义字符功能消失(让所有字符都变成普通字符)
str1 = r'\tabc\n123'
print(str1)  # \tabc\n123

path = R'C:\names\proms\python\a.txt'
print(path)  # C:\names\proms\python\a.txt

二.字符编码

计算机存储数据只能存数字(存的是数字的二进制补码)
1.字符编码
"""
为了能够让计算机存储文字符号,给每个符号对应了一个固定的数字,每次需要存储这个符号的时候,就去存储这个固定的数字
每次对应的那个数字就是这个符号的编码值
"""
2.编码表 - 保存字符和字符对应编码值的表
"""
1)ASCII码表
美国信息标准码(只包含了美国人常用的符号,总共128个)
数字字符(0 - 48)
大写字母(A - 65)
小写字母(a - 97)
英文输入法下的特殊符号

2)Unicode编码表(Python)  -  包含了世界上所有的国家所有民族的所有的符号语言
Unicode编码表包含了ASCII (前128个字符就是ASCII码表中的内容)
中文编码范围:0x4e00~0x9fa5
"""
3.编码值的应用
1)chr(编码值) - 获取编码值对应的字符
print(chr(97))  # a
print(chr(0x4e00))  # 一
print(chr(0x9fa5))  # 龥

from pypinyin import pinyin

print(pinyin('龥'))
# 所有中文
# for x in range(0x4e00, 0x9fa5):
#     print(chr(x), pinyin(chr(x)), end=' ')
2)ord(字符) - 获取指定字符对应的编码值
注意:字符指的是长度为1的字符串
print(ord('a'))  # 97
print(ord('张'))
print(ord('小'))
print(ord('花'))
将char对应的小写字母转换成大写字母
char = 'm'
print(chr(ord(char) - 32))
"""
a:97  A:65
b:98  B:66
...
"""
3)编码字符:\u4位的16进制编码值
在字符串中提供的方式有两种:a.直接提供字符 b.使用编码字符
hex(10进制数) - 获取指定数字对应的16进制表示方式(几进制都可以)
str1 = 'ab你好'
print(str1)
如果知道字符编码值是多少,但是不知道字符是什么的时候,就可以使用编码字符来表示这个字符
str2 = '\u0061'
print(str2)  # a

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

三.获取字符

字符串获取字符的方法和列表获取元素的方法一样
1.获得单个字符
字符串[下标]
注意:转义的长度是1
str1 = '\thello \nworld!'
print(str1[5])  # o
print(str1[-1])  # !
2.字符串切片
字符串[开始下标:结束下标:步长]
str1 = 'good good study!'
print(str1[1:-2:2])  # odgo td
print(str1[-3:])  # dy!
3.遍历字符串
for x in str1:
    print(x)
for index in range(len(str1)):
    print(index, str1[index])
str2 = 'asdfghjkl'
print(str2[2:6:2])  # dg
print(str2[-6:])  # fghjkl

四.字符串相关操作

1.字符串加法运算 - 字符串拼接
字符串1 + 字符串2 - 将2个字符串合并成一个字符串
str1 = 'hello'
str2 = '你好'
print(str1 + ' ' + str2)  # hello 你好
案例:提取字符串所有数字字符
str1 = 'ni年后1546张学生的32:“:'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += x
print(new_str)  # 154632
案例2:将字符串中所有的数字字符都加上%
str1 = 'ni年后1546张学生的32:“:'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += x + '%'
    else:
        new_str += x
print(new_str)  # ni年后1%5%4%6%张学生的3%2%:“:
练习:将字符串中所有的数字字符都改成 +
str1 = '世界上89Kl22.9;;//sh66-==1'
# '世界上++Kl++.+;;//sh++-==+'
new_str = ''
for x in str1:
    if '0' <= x <= '9':
        new_str += '+'
    else:
        new_str += x
print(new_str)  # 世界上++Kl++.+;;//sh++-==+
2.字符串乘法运算
字符串 * N 、 N * 字符串 - 让字符串中的元素重复n次产生一个新的字符串
str1 = 'a' * 10
print(str1)

str1 = '你好' * 5
print(str1)
3.字符串比较运算
1)比较是否相等:== 、 !=
print('abc' == 'bac')  # False
2)两个字符串比较大小,比较的是第一对不相等的字符的编码值的大小
"""
判断字符性质:
是否是数字字符:'0' <= x <= '9'
是否是小写字母:'a' <= x <= 'z'
是否是大写字母:'A' <= x <= 'Z'
是否是字母:'a' <= x <= 'z' or 'A' <= x <= 'Z'
是否中文:'\u4e00' <= x <= '\u9fa5'
"""
print('abc' > 'bcc')  # False
print('a1mn' > 'abc')  # False
print('a你好' > 'abc')  # True
4.in 和 not in
字符串1 in 字符串2 - 判断子串
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
print(max('heloworld!'))  # w
print(sorted('heloworld!'))  # ['!', 'd', 'e', 'h', 'l', 'l', 'o', 'o', 'r', 'w']
2)len(字符串)
msg = '\thello world!'
print(len(msg))  # 13
3)str(数据) - 任何类型的数据都可以转换成字符串;转换的时候是在数据的打印值外加引号
str(100)  # '100'
str(1.23)  # '1.23'

list1 = [10, 20, 30]
str(list1)  # '[10, 20, 30]'

list1 = [10,20,30]
print(list1)  # [10, 20, 30]
str(list1)   # '[10, 20, 30]'

list1 = ["zhang",18,'女']
print(list1)  # ['zhang', 18, '女']
str(list1)  # "['zhang', 18, '女']"
4)eval(字符串) - 去掉字符串的引号,获取引号中表达式的结果
a = eval('100')  # 100

# eval('abc')  # NameError: name 'abc' is not defined

abc = 100
c = eval('abc')  # c = abc
d = eval('"hello"')  # d = "hello"
# eval('01')  # 报错

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

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

五.字符串相关方法

字符串.xxx()
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, 10, 20, 45]
result = ' + '.join([str(x) for x in nums])
print(result)  # 90 + 10 + 20 + 45
print(eval(result))  # 165
2.字符串1.count(字符串2) - 统计字符串1中字符串2的个数
msg = 'how are you? i am fine! thank you, and you?'
result = msg.count('a')
print(result)  # 4

result = msg.count('you')
print(result)  # 3
3.字符串1.split(字符串2) - 将字符串1中所有的字符串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?']

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

result = msg.split(' ', 3)
print(result)  # ['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')
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 ?

msg = 'how are you? i am fine! thank you, and you?'
result = msg.replace('you', '+', 2)
print(result)  # how are +? i am fine! thank +, and you?
5.字符串.strip() - 去掉字符串前后的空白字符
msg = """

how are me? i am fine! thank me, and me?

"""
print(msg.strip())
msg = '           小明        '
print(msg.strip())  # 小明

msg = '///小/明'
print(msg.strip('/'))  # 小/明
6.
字符串.isupper() - 判断字符串是否是纯大写字母字符串
字符.isupper() - 判断字符是否是纯大写字母字符串
print('SFG'.isupper())
print('A'.isupper())
7.字符串.islower() - 判断字符或者字符串是否全是小写字母
print('a'.islower())        # True
8.字符串.isdigit() - 判断字符或者字符串是否全是数字字符
print('9'.isdigit())
print('720233'.isdigit())
9.字符串.upper() - 所有大写转为小写
print('hs技术上223jKJ90lo'.upper())
print('m'.upper())
10.字符串.lower() - 所有大写转为小写
print('hAMs技术上223jKJ90lo'.lower())
print('Q'.lower())
案例:判断char是否是字母
char = '2'

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


if 'a' <= char <= 'z' or 'A' <= char <= 'Z':
    print('是字母')
else:
    print('不是字母')

六.格式化字符串

解决的问题:字符串内容不确定
# name = input('请输入学生的名字:')
name = '张三'
# age = input('请输入学生的年龄:')
age = 20
# money = input('请输入你的月薪:')
money = 1223456
# xxx今年xx岁,月薪:xxx元!
1.字符串拼接
msg = name + '今年' + str(age) + '岁,月薪:' + str(money) + '元'
print(msg)
2.格式字符串 - 包含格式占位符的字符串
"""
1)语法:包含格式占位符的字符串 % (数据1, 数据2, 数据3,...)
2)注意:()中的数据必须和前面字符串中的占位符一一对应
3)常见的格式占位符:
%s      -       可以给任何类型的数据占位
%d      -       可以给任何数字占位(整数占位符,如果给的数字是小数,会自动转换成整数再拼接再字符串中)
%f      -       可以给任何数字占位(浮点数占位符)
%.Nf    -       控制保留N位小数 - 默认保留六位小数
"""
msg = '%s今年%d岁,月薪:%.2f元!' % (name, age, money)
print(msg)
# result = 'x: %d' % [10, 20]  # 报错
result = 'x: %.2f' % 3
print(result)  # x:3.00
result = 'x: %s' % 3.132345
print(result)  # x: 3.132345

## print('%2d'%3)
3.f-string
"""
在字符串的最前面(引号的前面)加f,就可以在字符串中通过{表达式}中表达式的结果来给字符串提供内容

"""
msg = f'{name}今年{age}岁,月薪:{money}元!'
print(msg)  # 张三今年20岁,月薪:1223456元!
a = 10
b = 20
print(f'{a} + {b} = {a+b}')  # 10 + 20 = 30
{表达式:.Nf} - 控制小数保留N位小数
a = 1.235
b = 2.3
print(f'{a:.2f} + {b:.2f} = {a + b:.0f}')
{表达式:.N%} - 控制数字显示成百分比,N为百分比的小数位数
c = 0.99
print(f'及格率:{c:.0%}')  # 及格率:99%
{表达式:,.Nf} - 标准的金额拼接
# 124536  ->  ¥124,536
d = 124536
print(f'¥{d:,.2f}')  # ¥124,536.00
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张小花-Soleil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值