day-8字符串

字符串和字符

1.什么是字符串(str)

字符串是容器型数据类型,将''/""/""""""作为容器标志、容器中元素全是字符
不可变(不支持增删改)、有序(支持下标操作)

str1 = 'hello'
str2 = "你好"
str3 = '''thanks'''
str4 = """谢谢"""

2.字符串中的元素 - 字符

python中只有字符的概念,没有对应的数据类型。引号中只有一个元素的字符串可以看成一个字符
字符串又叫字符集

1)字符串中的字符 - 原则上任何可以通过键盘输入或者从其他地方复制粘贴的所有符号都可以作为字符
"""
a.普通字符:在字符串中能够代表符号本身的字符(没特殊意义,没功能的符号)
b.转义字符:在字符串中有特殊意义和特殊功能的符号的组合,一般以\开头

\n - 换行
\'  \" - 表示’或”本身
\t - 表示一个缩进(tab)
\\ - 表示一个\
注意:所有转义字符的长度都是1

c.编码字符
"""
2)阻止转义:在字符串的最前面加r/R可以让字符串所有转义字符都失效
# \u四位的16进制数 - 编码字符(获取4位16进制数作为编码值对应的字符)

str1 = 'abc\n123'
print(str1)

str2 = 'abc\'1\"23'
print(str2)

str3 = '\tabc'
print(str3)

str4 = 'abc\\123'
print(str4)

str5 = 'abc\u4eba'
print(str5)

str6 = r'\tabc\n\'123'
print(str6)

3.字符编码

计算机不能直接存储字符(符号),只能存数字;
为了能存储字符,把每个字符都关联一个固定数字(编码)

字符和数字对应的关系就是编码表:ASCII码表,Unicode编码表(python)
1)ASCII码表 - 在计算机中采用一个字节保存一个字符(总共128个字符),字符包含了所有字母、数字和美国常用符号
0~9:编码值从48开始依次增加
大写字母编码值<小写字母编码值
大写字母和小写字母不是紧挨着

2)Unicode编码表是ASCII码表的扩展,包含了世界上所有的国、所有的语言对应的符号(总共65536个符号)
ASCII码表:0~127
中文编码范围:0x4e00~0x9fa5

1.编码字符:\u4位16进制编码值
str1 = 'abc\u50aa'
print(str1)
2.chr(编码值) - 获取编码值对应的字符
print(chr(97))
3.ord(字符) - 获取指定字符对应的编码值
print(hex(ord('雷')))
print(hex(ord('军')))

字符串操作

1.查 - 获取字符(和列表获取元素的方式一样)

1)获取单个字符:字符串[下标]
2)切片:字符串[开始下标:结束下标:步长]
3)遍历:直接遍历元素、通过下标遍历

# 注意:一个空格是一个字符;一个缩进4个空格4个字符;\t对应一个字符
str1 = '\thello python!'
print(str1[-2])  # n
print(str1[2])  # e

print(str1[2:])  # ello python!

# 遍历每个元素
for x in str1:
    print('x:', x)

print('========================')

# 遍历每个元素,返回下标和元素
for x, y in enumerate(str1):
    print(x, y)

2.相关操作

1)运算符:
a.+,*

str1 = 'abc'
str2 = '123'
print(str1+' '+str2)    # abc 123
print(str1 * 3)     # abcabcabc

b.==,!=,is

print('abc' == 'abc')   # True
print('abc' == 'acb')   # False

符号:>,<,>=,<=
字符串1 > 字符串2
字符串比较大小比较的是字符串编码值的大小

"""
判断字符是否是小写字母: 'a' <= char <= 'z'
判断字符是否是小写字母: 'A' <= char <= 'Z'
判断字符是否是字母:'A' <= char <= 'Z' or 'a' <= char <= 'z'
判断字符是否是中文: '\u4e00' <= char <= '\u9fa5'
判断字符是否是数字: '0' <= char <= '9'
"""
print('abcdef' > 'bc')  # False
print('Z' < 'a')    # True

练习:输入一个字符串,判断这个字符串是否全是中文

str1 = input('请输入字符串:')
for i in str1:
    if not '\u4e00' <= i <= '\u9fa5':
        print('不是中文')
        break
else:
    print('是中文')

in / not in
字符串1 in 字符串2 -> 判断字符串2中是否包含字符串1

3)相关函数:len,str,sorted,reversed
a.len(字符串)

print(len('\taaa1 2\n33'))   # 10 转义字符和空格算一个字符

b.str(数据) - 所有数据都可以转换成字符串;直接将数据的打印值加引号

a = 100
str(a)      # '100'
str(True)   # 'True'
list1 = [10, 20, 30]
str4 = str(list1)   # '[10, 20, 30]'
print(len(str4), str4[0])   # 12 [

c.sorted(字符串) - 按编码从小到大排列

str5 = 'python'
list2 = sorted(str5)
print(list2)    # ['h', 'n', 'o', 'p', 't', 'y']

格式字符串

1.格式占位符

"""
a.语法: 包含格式占位符的字符串 % (值1,值2,值3...)
b.说明: 
格式占位符 - 格式占位符有哪些是固定的,使用的时候和字符串中变化的数据类型相关
%s - 字符串(任何类型都可以使用%s占位)
%d - 整数
%-Nd - 整数;N约束数字最后的长度,如果不够后面空格填充
%Nd                                前面空格填充
%f - 浮点数;小数点后面保留6位小数
%.Nf - 浮点数;小数点后面保留N位小数(四舍五入)
%c - 单个字符或数字,如果为数字为编码值可以自动转换

% - 固定写法
() - 固定写法;如果值的个数是1可以省略
值 - 任何有结果的表达式;值得个数和类型和前面占位符的个数以及类型保持一致
"""
name = '雷军'
age = 18
num1 = 1.257
print('我是%s,今年%-4d岁!' % (name, age))    # 我是雷军,今年18  岁!
print('我是%s,但被约束成%.2f了' % (num1, num1))     # 我是1.257,但被约束成1.26了
print('%c,%c' % ('z', 97))

2.format

一个带有{}的字符串.format(值1,值2,值3...)

# 用法1:让空的{}个数和format中值的个数保持一致
print('我是{},今年{}岁'.format('雷军', 34))  # 我是雷军,今年34岁

# 用法2:{N} - N从0开始依次增加,分别表示format中第0个值,第1个值...
print('我是{0},年龄是{1},今年{1}岁'.format('雷军', 34))  # 我是雷军,年龄是34,今年34岁
print('{1},{0},{1}'.format(10, 20))  # 20,10,20

# 用法3:{key}
# '{key1},{key2}'.format(key1=值1, key2=值2)
print('{name},{age}'.format(name='雷军', age=18))  # 雷军,18

# 用法4:用列表元素给占位符赋值
list1 = [10, 20, 30, 40]
print('{0[2]},{0[0]},{0[1]}'.format(list1))  # 30,10,20
print('{1[1]},{1[2]},{0}'.format('雷军', list1))  # 20,30,雷军

# 用法5:用字典的值给占位符赋值
student = {'name': '小明', 'age': 18, 'id': '001', 'score': 100}
print('{name}今年{age}岁,学号:{id},考了{score}'.format(**student))  # 小明今年18岁,学号:001,考了100
# format(**student) --> format(name='小明',age=18,id='001',score=100)

# 其他方法:
print('圆周率:{:.2f}'.format(3.141592653))  # 圆周率:3.14 约束小数点位数
print('整数:{:S>4d}B'.format(25))  # 整数:SS25B
print('整数:{:S<4d}B'.format(25))  # 整数:25SSB
print('整数:{:+>4d}B'.format(25))  # 整数:++25B

字符串相关方法

1.字符串.capitalize() -将字符串的首字母变成大写
print('python'.capitalize())  # Python

# 97-65 == 32; 98-66 == 32
char = 'j'
print(chr(ord(char) - 32))  # J  小写转大写
2.center/ljust/rjust/zfill
"""
字符串.center(宽度,填充字符)
字符串.ljust(宽度,填充字符)
字符串.rjust(宽度,填充字符)
字符串.zfill(宽度) == 字符串.rjust(宽度,'0')
"""

print('abc'.center(7, 'X'))  # XXabcXX
print('abc'.ljust(7, 'X'))  # abcXXXX
print('abc'.rjust(7, 'X'))  # XXXXabc
print('abc'.zfill(7))  # 0000abc
3.count()
# 字符串1.count(字符串2) - 统计字符串2在字符串1中出现了多少次
str2 = 'hello python!'
print(str2.count('o'))  # 2
print(str2.count('th'))  # 1
4.字符串查找

字符串1.find(字符串2) - 获取字符串2第一次出现在字符串1中的位置,没有不会报错
字符串1.index(字符串2) 跟上面一样,但没有会报错

5.join
"""
字符串.join(序列) - 将序列中的元素与字符串拼接在一起,产生新的字符串
                    序列中的元素必须是字符串
"""
str3 = '+'.join('雷军牛逼')  # 雷+军+牛+逼
print(str3)
6.字符串替换
"""
1)字符串1.replace(字符串2,字符串3) -> 将1中2替换成3,产生新的
2)
字符串1.maketrans(字符串1,字符串2) -> 创建字符串和字符串3一一对应的映射表
字符串1.translate(替换映射表)
"""
str4 = 'how are you? I am fine 3Q!'

print(str4.replace('a', 'what'))  # how whatre you? I whatm fine 3Q!

table = str.maketrans('a!', 'b+')  # 将字符串4中的a变成b,!变成+
new_str4 = str4.translate(table)
print(new_str4)  # how bre you? I bm fine 3Q+
7.字符串切割
"""
字符串1.split(字符串2) - 将字符串1中所有字符串2作为切割点切成多份
"""
str5 = 'how are you? I am fine 3Q!'
print(str5.split(' '))  # ['how', 'are', 'you?', 'I', 'am', 'fine', '3Q!']
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 1 字符编码 python中的编码采用的是Unicode编码。什么是编码?就是数字和字符的一一对应的,其中字符对应...
    barriers阅读 411评论 0 1
  • 1.什么是字符串(str) 字符串是Python内置的一种容器型数据类型,不可变但是有序;将单引号或者双引号作为容...
    聂叔叔呀阅读 263评论 0 0
  • 字符串 1.什么是字符串 序列:有序,不可变的。用单引号或者双引号括起来的任意字符(集)。 2.字符串中的字符 a...
    落幕丶丶阅读 789评论 0 0
  • 一、获取字符 1.单个字符 原理:字符串中的每一个字符都会对应一个唯一的下标(索引)下标:用来表示字符在字符串中的...
    两只小猪呼噜噜_1539阅读 477评论 0 1
  • 1.什么是字符串(str) 字符串是python内置的一种容器型数字类型,不可变、有序 ;不可变:指的是内容的值和...
    WeeJoo阅读 6,786评论 0 1