day8-字符串全解

"""================================ 字符串 ==============================="""
'''
字符串是容器型数据类型,将'',"",'''''',""""""作为容器的标志里面的每一个基本符号都是字符串中的元素。
字符串数不可变的(不支持增删改);字符串是有顺序的(支持下标操作)
元素:引号里面的每个基本元素就是字符串的元素,又叫字符串
'''
""" 一、字符串 """
# 1) 空串。

s1 = ''

s2 = ""
s3 = ''''''
s4 = """"""
print(s1, s2, s3, s4)
print(type(s1), type(s2), type(s3), type(s4))   # <class 'str'> <class 'str'> <class 'str'> <class 'str'>

# 2)'',""与'''''',""""""的区别
# 注意:'', ""字符串中不能直接换行,但是''', """中式可以换行的。

s5 = 'adsadadada'
s6 = '''
黑云压城城欲摧
甲光向日金鳞开
'''
print(s5)
print(s6)

# 3) 字符串是有序的
print('abc' == 'cba') # False

""" 二、字符。"""
'''
字符分为普通字符和转义字符两种
1) 转义字符
在特定的一个或者多个符号前加'\'让符号具有特殊功能或者特殊意义,那么这种带有'\'的字符就是转义字符。
\n - 换行
\t - 水平制表符
\' - 表示一个普通单引号 
\" - 表示一个普通双引号
\\ - 表示一个普通反斜杠

注意:任意一个转义字符的长度都是1。
2) 除了转义字符以外的字符都是转义字符。普通字符在字符串中表示这个符号本身,包括:汉字,数字,字母,符号,表情符号... '🙂', '+-*/'
'''

str1 = 'abc\n123'
print(str1)
str2 = 'abc\t123'
print(str2)
str3 = 'abc\\123'
print(str3)

# 特殊的转义字符 - 编码字符: \u四位的十六进制数对应的编码值
str4 = 'abc\u4560'
print(str4)
print('\u1256')
""" 三、字符编码 """
'''
1) 什么是字符编码
计算机在存储数据的时候只能存数字(存的数字二进制补码),为了能够让计算机存储字符,我们给每一个字符都对应了一个固定的数字,那么每一个字符对应的固定数字就是这个字符的编码值。
2) 字符编码表 - 记录字符和数字之间一一对应的关系的表就是字符编码表
常见的字符编码表有两种:ASCLL码表,Unicode编码表
a.ASCLL码表总共有128个字符对应的编码,其主要包含的数美国通用符号其中包括:英文标点符号,数字符号,字母字符以及其他的一些符号。ASCLL码表中,数字字符在字母前,大写字母在小写字母的前面,大写和小写的字母之间也有间隔。
b.Unicode编码表包含ASCLL码表,中文编码范围:4e00 - 9fa5
'''

# chr(编码值) - 获取编码值对应的字符
print(chr(0x4e00), chr(19968), chr(97)) # — — a
print(chr(97))

# 练习:打印所有的中文字符。
count = 0
for x in range(0x4e00, 0x9fa5+1):
    print(chr(x),end = ' ')
    count += 1
    if count % 25 == 0:
        print()

# ord(字符) - 获取字符对应的编码值(返回的是十进制数)
print(ord('余'), ord('婷')) # 20313 23159
print(hex(20313), hex(23159)) # 0x4159 0x5a77
"""============================ 字符串的操作 ==============================="""

# 第一节

""" 1.获取字符:字符串获取字符和列表获取元素的方法一样 """
# a.获取字符

sentence = '死亡如风,常伴吾身!'
print(sentence[2], sentence[-8])

# b.字符串切片

sentence2 = 'good good study! day day up!'
print(sentence2[5:-2])
print(sentence2[1:-2:-2])
print(sentence2[::-1])

# c.字符串遍历

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

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

for x in range(len(sentence2)):
    print(x, sentence2[x])

""" 2.加法乘法 """

print('abc' + 'efg')
print('abc' * 9)

""" 3.比较大小:两个字符串比较大小:是比较第一对不相等的字符编码值的大小。"""
'''
'a' <= char <= 'z' - 小写字母
'A' <= char <= 'Z' - 大写字母
'a' <= char <= 'z' or 'A' <= char <= 'Z' - 字母
'0' <= char <= '9' - 数字字符
'\u4e00' <= char <= '\u9fa5' - 中文字符
print('abc'>'yzm')
print('我'>'yzm')
'''

# 练习:输入一个字符串,统计字符串中小写字母的个数。
str11 = 'abcdABCD'
n = 0
for x in str11:
    if 'a' <= x <= 'z':
        n += 1
print("小写字母个数 : ", n)

# 练习:输入一个字符串,删除字符串中所有中文字符。例如:nis耗时ss==AHJ看 -> nisss==AHJ。

str12 = 'nis耗时ss==AHJ'
str13 = ''
for x in str12:
    if not '\u4e00' <= x <= '\u9fa5':
        str13 += x
    else:
        continue
str12 = str13
print(str12)

# 字符串开头加r,可以使得字符串中所有的转义字符失效。(所有符号都会变成成普通字符)
str4 = r'\dasd//d656\n/'
print(str4)

path = R'c:\users\下载\name\图1.png'
print(path)

# 1. in 和 not in :字符串1 in 字符串2 - 判断字符串1是否是字符串2的子串。

print('a' in 'abc')
print('ab' in 'abc')
print('ac' in 'abc')

# 第二节

''' 相关函数 '''

# len.str:求长度函数
str1 = '曾经有一段真挚的爱情...'
print(len(str1))  # 8

str2 = '\tabc\n123'
print(len(str2))  # 10

str3 = r'\tabc\n123'
print(len(str3))  # 8

str4 = 'abc  123'
print(len(str4))  # 10

# 2) str(数据) - 将数据转换成字符串。
# a.哪些能转:所有的数据都可以转换成字符串
# b.怎么转:在数据打印值外面加引号

num = 100
print(str(num))  # '100'
print(str(True))  # 'True'
print(str([1, 2, 3]))  # '[1, 2, 3]'

'''
注意:
a.所有的数据都能转换成字符串。
b.怎么转:在数据打印值的外面加引号。
c.字符串转数字:去掉引号后字符串本身是整数才能转换成整型
'''

# 去掉引号后本身是整数的字符串才能转换成整型

# str1 = '12.5'
# print(int(str1))

# c.字符串转数字
str6 = '782'
print(int(str6))

str7 = '3e10'
print(float(str7))

str8 = '12.5'
print(float(str8))

# str9 = '2e10'
# print(int(str9)
# 科学计数法默认为浮点型,不能直接转化为整形。

"""============================ 字符串常用方法 =============================="""
# 字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数

message = "abcdabcdadbc"
print(message.count('a'))

# 字符串1.find(字符串2)  -  获取字符串2第一次在字符串1中出现的位置(返回的是下标值), 如果找不到就返回-1
message = 'how are you? i am fine, Thank you, and you?'
print(message.find('you'))   # 8
print(message.find('a'))   # 4
print(message.find('你好'))   # -1(找不到)

# 字符串1.find(字符串2,开始下标,结束下标)  -  获取字符串2在字符串1指定范围内第一次出现的位置
print(message.find('you', -7))   # 39  (在'nd you?'找 'you')
print(message.find('you', 0, 10))   # -1  (在'how are yo'找 'you')

# 字符串.join(字符串序列) - 将序列中所有的元素用指定字符串拼接产生一个新的字符串
list1 = ['name', 'age', 'abc', '你好']
new_str = ''.join(list1)
print(new_str)   # 'nameageabc你好'
print('+'.join(list1))  # 'name+age+abc+你好'

message = 'hello'
new_str = ' '.join(message)
print(new_str)    # 'h e l l o'

print('😁😢'.join(message))   # h😁😢e😁😢l😁😢l😁😢o

# 看一眼! [str(x) for x in nums] - 列表推导式
nums = [100, 20, 30, 40]
print(''.join([str(x) for x in nums]))   # 100203040

# 字符串1.replace(字符串2, 字符串3)  -   将字符串1中所有的字符串2都替换成字符串3,产生一个新的字符串
# 字符串1.replace(字符串2, 字符串3, N)  - 将字符串1中前N个字符串2替换成字符串3

message = 'how are you? i am fine, Thank you, and you?'
new_str = message.replace('you', 'YOU')
print(new_str)   # how are YOU? i am fine, Thank YOU, and YOU?

new_str = message.replace('you', 'me', 2)
print(new_str)    # how are me? i am fine, Thank me, and you?

# 字符串1.split(字符串2)  -  将字符串1中的字符串2作为切割点对字符串1进行切割
message = 'how are you? i am fine, Thank you, and you?'
print(message.split(' '))   # ['how', 'are', 'you?', 'i', 'am', 'fine,', 'Thank', 'you,', 'and', 'you?']

str1 = 'abc123abc123abc'
print(str1.split('123'))   # ['abc', 'abc', 'abc']
print(str1.split('1'))    # ['abc', '23abc, '23abc']
print(str1.split('b'))    # ['a', 'c123a', 'c123a', 'c']
print(str1.split('c'))    # ['ab', '123ab', '123ab', '']

str2 = 'abc123abcc123'
print(str2.split('c'))    # ['ab', '123ab', '', '123']

# 字符串1.split(字符串2, N)  - 将字符串1中的前N个字符串2作为切割点对字符串1进行切割
message = 'how are you? i am fine, Thank you, and you?'
print(message.split(' ', 2))  # ['how', 'are', 'you? i am fine, Thank you, and you?']

# 6.字符串.zfill(N)  - 将字符串转换成一个指定长度的新字符串,原字符串在右边,左边用0填充
num = '34'
print(str(num).zfill(4)) #  0034

""""""
# name = input('请输入姓名:')
name = '小明'
# age = int(input('请输入年龄;'))
age = 25
# money = float(input('请输入月收入:'))
money = 12000

# massage:xxx 今年 xxx 岁
message = name + '今年' + str(age) + '岁,' + '月薪'+str(money)+'元'
print(message)

# 当一个字符串有一个或者多个部分是变化的时候,我们可以用字符串加法运算,格式字符串和f字符串来实现这个功能。
"""============================ 格式字符串 ==================================="""

'''
格式字符串:在字符串中用格式占位符代替字符串变化的部分,然后再后面用数据来给格式占位符赋值
语法:
带有格式占位符的字符串 % (数据1, 数据2, 数据3.....)
说明:
1) & 固定写法
2) 固定写法,再数据只有一个的时候
可以忽略
3) 数据 - 数据的个数必须和前面字符串中占位符的个数保持一致,类型也要和占位符一一对应
4) 格式占位符 - 格式占位符有那些,对应的数据的类型是什么都是固定的,
%s - 字符串(可以去是其他数据)
%d - 整数
%f - 浮点数
%c - 字符(字符编码值)
'''

message = '%s今年%d岁,月薪%.2f元, 等级:%c' % (name, age, money, 65)
print('格式字符串:', message)

message = '{}今年{}岁, 月薪{}元'.format(name, age, money)
print('格式字符串:', message)

'''
# format方法:f-string
包含{}的字符串.format(数据1,数据2,...)   -  字符串中{}就相当于格式字符串中的占位符
'''
# 基本用法:
# a.{}
message = '{}今年{}岁,月薪{}元'.format(name, age, money)
print('format1:', message)

# b.{下标}  - 下标指的是获取format中第几个数据,从0开始
# 'xxx的年龄:xx, 今年xx岁'
message = '{1}的年龄:{0}, 今年{0}岁'.format(age, name)
print('format2:', message)

# c.{key}
message = '{y}的年龄:{x}, 今年{x}岁'.format(x=age, y=name)
print('format3:', message)


""" 格式约束:{:约束条件}, {下标:约束条件}, {key:约束条件}"""
'''
约束条件:.NF保留N位小数(四舍五入)
符号>Nd  - 约束数据宽度为N,不够的在前面用指定符号填充
符号<Nd  - 约束数据宽度为N,不够的在后面用指定符号填充
, - 将数字三位一组用逗号隔开(一般用于大数据的表示)
% - 将小数转换成百分比数据,保留6位小数
.N% - 将小数转换成百分比数据,保留N位小数
'''
print('约束1:{:.2f}'.format(3.1415926))
print('约束2:{:.3f}'.format(3.1415926))
print('约束3:{:0>6}'.format(100))
print('约束4:{:0<5}'.format(12))
print('约束5:{: >5}'.format(34))

print('约束3:{:,}'.format(1000000))
print('约束3:{:.3%}'.format(0.625))

# f-string - format方法的简写
''' 语法:f'字符串内容' '''

message1 = f'{name}今年{age}岁, 月薪:{money}元'
print(message1)
message2 = f'{name*2}今年{age+10},月薪:{money/1000}K'
print(message2)

# 添加约束

print(f'pi:{3.1415926:.2f}')   # pi:3.14
print(f'年龄:{age: >5}')     # 年龄:   23
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

虎啸君

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

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

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

打赏作者

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

抵扣说明:

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

余额充值