day8-字符串

一、字符串和字符

1.什么是字符串(str)

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

str1 = 'hello'
str2 = "hello"
str3 = '''hello'''
str4 = """hello"""
print(type(str1))
print(type(str2))
print(type(str3))
print(type(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\'123'
print(str2)

str3 = '\tabc'
print(str3)

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

str5 = 'abc\u28dd'
print(str5)

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

3.字符编码

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

字符和数字一一对应关系就是编码表:ASCII码表,Unicode编码表(python)

1)ASCII码表 - 在计算机中采用一个字节保持一个字符(总共128个字符),字符包含了所有的字母、数字、和美国常用符号

0:48
A:65
a:97

2)Unicode编码表

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

1.编码字符:\u4位的16进制编码值

str1 = 'abc\u6fff'
print(str1)

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

 print(chr(97))
 num = 0
 for x in range(0x0f00, 0x0fff+1):
     print(chr(x), end=' ')
     num += 1
     if num % 30 == 0:
         print()

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

print(hex(ord('小')), hex(ord('明')))

二、字符串操作

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

1)获取单个字符:字符串[下标]

2)切片:字符串[开始下标:结束下标:步长]

3)遍历:直接遍历元素、通过下标遍历

注意:一个空格是一个字符;按tab键是4个空格,4个字符;\t对应一个字符

获取单个字符

str1 = '\thello Python!'
print(str1[-2])   # n
print(str1[2])    # e

切片

print(str1[2:])   # ello Python!
print(str1[1:-1:2])   # hloPto
print(str1[:3:-1])    # !nohtyP ol

遍历

for x in str1:
    print('x:', x)

for 下标,元素 in enumerate(序列):

循环体
for index, item in enumerate(str1):
    print(index, item)

2.相关操作

1)运算符:

a. +、*

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

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

char = '中文'
if '\u4e00' <= char <= '\u9fa5':
    print('是中文')
else:
    print('不是')

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

 i = input('输入:')
 for x in i:
     if not '\u4e00' <= x <= '\u9fa5':
         print('不是')
         break
 else:
     print('是')

in/not in

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

st3 = 'abc 123'
st4 = 'b'
print(st4 in st3)    # True
print('abc' in st3)    # True
print('ac' in st3)    # False

3)相关函数:len、str、sorted、reversed

a.len(字符串) 转义字符长度是1

print(len('\tabc\n123'))

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

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

c.sorted(字符串)

str5 = 'python12Q'
print(sorted(str5))     # ['1', '2', 'Q', 'h', 'n', 'o', 'p', 't', 'y']
list2 = sorted(str5)
print(''.join(list2))    # 12Qhnopty

三、格式字符串

1.格式占位符

a.语法:包含格式占位符的字符串 % (值1,值2,值3,..........)

b.说明:

格式占位符 - 格式占位符有哪些是固定的,使用的时候和字符串中变化的数据类型相关

    %s    -  字符串(任何类型都可以使用%s占位)
    %d    -  整数;
    %-Nd  -  整数:N约束数字最后的长度,如果不够后面补空格
    %Nd   -  整数;N约束数字最后的长度,如果不够前面补空格
    %f    -  浮点数;小数点后面保留6位小数
    %.Nf  -  浮点数,N约束小数点N后的小数位数
    %c    -  字符、字符对应的编码值

% - 固定写法
() - 固定写法;如果值的个数是1可以省略
值 - 任何有结果的表达式;值的个数和类型和前面占位符的个数及类型保持一致

 name = input('请输入姓名:')
 age = int(input('请输入年龄:'))
 print('你好,我是%s,今年%d岁,工资:%.2f, %s' % (name, age, 1000, 1.234))

2.format

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

用法1:让空的{}个数和format中值的个数保持

print('我是{},今年{}岁'.format('二电厂', 18))

用法2:{N} N从0开始依次增加,分别表示format中第0个值,第1个值,......

print('我是{0},今年{1},年是{1}'.format('展现出', 18))
print('数据1:{1},数据2:{0},数据3:{1}'.format(10, 20))

用法3:[key]

'{key1}, {key2}'.format(key1=值1,key2=值2)

print('我是{name},年龄{age},今年{age}'.format(name='阿萨德', age=18))

用法4:用列表元素给占位符赋值

list1 = [10, 20, 30, 40]
print('{0[0]},{0[1]},{0[3]}'.format(list1))
print('{1[1]},{0},{1[2]}'.format('张三', list1))

用法5:用字典的值给占位符赋值(了解)

student = {'name': '小明', 'age': 20, 'id': '001', 'score': 100}
print('{name}今年{age}岁,学号是{id},考了{score}'.format(**student))
# format(**student)  -->  format(name='小明', age=20, id='001', score=100)

其他的写法:

print('圆周率{:.2f}'.format(3.1415926))  # 约束小数位数
# 约束整数宽度
print('整数:{:x>3d}.'.format(25))  # x25
print('整数:{:a<3d}.'.format(25))  # 25a
# 分割
print('{:,}'.format(10000000000000))  # 10,000,000,000,000
# 百分比
print('{:.2%}'.format(0.25))

四、字符串相关方法

1.字符串.capitalize() - 将字符串的首字母变成大写字母

str1 = 'python'
print(str1.capitalize())

center/ljust/rjust/zfill

字符串.center(宽度,填充字符) - xabcx
字符串.ljust(宽度,填充字符) - abcxx
字符串.rjust(宽度,填充字符) - xxabc
字符串.zfill(宽度) == 字符串.rjust(宽度, '0')

print('abc'.center(7, 'x'))
print('abc'.ljust(7, 'x'))
print('abc'.rjust(7, 'x'))
print('abc'.zfill(7))
num = 2
print(str(num).zfill(3))

字符串1.count(字符串2) -> 统计字符串1中字符串2出现的次数

字符串1.count(字符串2,开始下标,结束下标) -> 统计字符串1开始下标到结束下标范围类字符串2出现的次数

str2 = 'how are you? i am fine! fuck you!'
print(str2.count('you'))
print(str2.count('a'))

print(str2.count('you', 0, 15))

str1 = 'abc'
str2 = 'how are you'

判断str2是否以str1结尾

print(str2[-len(str1):])

字符串查找

字符串1.find(字符串2) - 获取字符串2第一次在字符串1出现的位置(用大于等于0的下标值表示);
字符串2不存在的结果是-1
字符串1.index(字符串2) - 获取字符串2第一次在字符串1出现的位置(用大于等于0的下标值表示);
字符串2不存在会报错

str2 = 'how are you? i am fine! fuck you!'
print(str2.index('you'))
print(str2.find('you'))

join

字符串.join(序列) - 将序列中的元素用字符串连接在一起产生一个新的字符串;
序列中的元素是字符串

str3 = '+'.join('abc')
print(str3)  # a+b+c

str4 = ' '.join(['name', 'age', 'gender'])
print(str4)

str5 = ''.join({'a': 1, 'b': 2})
print(str5)

字符串替换

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

2)字符串1.maketrans(字符串2,字符串3) -> 创建字符串2和字符串3一一对应的映射表

字符串1.translate(替换的映射表)

str2 = 'how are you? i am fine! thank you!'
new_str2 = str2.replace('you', 'me')
print(new_str2)   # how are me? i am fine! thank me!

创建映射表

table = str.maketrans('a!', 'b+')
new_str2 = str2.translate(table)  # 将str2中所有a都替换成b,所有的!都替换成+
print(new_str2)

字符串切割

字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点切成多分

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

推荐阅读更多精彩内容

  • 1.什么是字符串(str) 字符串是容器型数据类型, 将''/""/''' '''/""" """作为容器...
    臨時人間阅读 180评论 0 0
  • 一、字符串和字符 1.什么叫字符串(str)字符串是容器型数据(元素只能是字符),将' '/" "/''' '''...
    孤独的死小孩阅读 121评论 0 1
  • 1.什么是字符串 1)字符串是容器型数据类型(序列):以单引号或者双引号作为容器的标志,引号中所有的内容都是字符串...
    LI3e0阅读 247评论 0 0
  • 字符串 1.什么是字符串(str) 1)字符串 字符串是容器型数据类型(序列); 以单引号或者双引号作为容器的标志...
    略略略_29fd阅读 191评论 0 0
  • 1.什么是字符串(str) 1)字符串字符串是容器型数据类型(序列); 以单引号或者双引号作为容器的标志, 引号中...
    tcis阅读 235评论 0 0