# Python学习
# 文件名称: align.py
# 学习时间: 2022/7/6 9:41
# 字符串内容对齐操作的方法
# 字符串对齐
# center() 居中对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认空格
# 如果设置宽度小于实际宽度则返回原字符串
# ljust() 左对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认空格
# 如果设置宽度小于实际宽度则返回原字符串
# rjust() 右对齐,第一个参数指定宽度,第二个参数指定填充符,第二个参数是可选的,默认空格
# 如果设置宽度小于实际宽度则返回原字符串
# zfill() 右对齐,左边用0填充,该方法只接收一个参数,用于指定字符串的宽度,如果指定的宽度
# 小于等于字符串的长度,则返回字符串本身
s='Hello,python'
'''中心对齐'''
print(s.center(20,'*'))
'''左对齐'''
print(s.ljust(20,'^'))
print(s.ljust(10))
print(s.ljust(20))
'''右对齐'''
print(s.rjust(20,'!'))
'''右对齐,0填充'''
print(s.zfill(20))
print('-8960'.zfill(8))
# Python学习
# 文件名称: case_switching.py
# 学习时间: 2022/7/6 9:31
# 字符串的大小写切换操作方法:
# upper() 把字符串中的所有字母都转成大写字母
# lower() 把字符串中的所有字母都转成小写字母
# swapcase() 把字符串中的所有大写字母转成小写字母,把小写字母转成大写字母
# capitalize()把第一个字母转换成大写,其余字母转换成小写
# title() 把每一个单词的第一个字母转换成大写,把每个单词的剩余字母转换成小写
# 注意:如果处理后无论结果仍新开辟一块空间
s='HeLlo,pytHon'
a=s.upper()
b=s.lower()
c=s.swapcase()
d=s.capitalize()
e=s.title()
print(a,b,c,d,e)
# Python学习
# 文件名称: code_decode.py
# 学习时间: 2022/7/6 11:51
# 为什么需要字符串的编码转换
# A计算机的string在内存中以Unicode表示,经过编码转为byte字节传输:
# byte信息经过解码在B计算机中显示
# 编码与解码的方式:
# 编码:将字符串转换为二进制数据(bytes)
# 解码:将bytes类型的数据转换成字符串类型
'''编码'''
s='天涯共此时'
print(s.encode(encoding='GBK')) # b表示二进制
print(s.encode(encoding='UTF-8'))
'''解码'''
# Python学习
# 文件名称: devide.py
# 学习时间: 2022/7/6 10:01
# 字符串劈分操作的方法:
# 字符串的劈分
# split() 从字符串的左边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
# 通过参数sep指定劈分字符串使用的劈分符
# 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分后,剩余子串
# 单独作为一部分
# rsplit() 从字符串的右边开始劈分,默认的劈分字符是空格字符串,返回的值都是一个列表
# 通过参数sep指定劈分字符串使用的劈分符
# 通过参数maxsplit指定劈分字符串时的最大劈分次数,在经过最大次劈分后,剩余子串
# 单独作为一部分
s='Hello world PyThon'
s1=s.split() # 默认空格
print(s1)
s='Hello|world|PyThon'
s2=s.split('|',1)
#s2=s.split(sep='|',maxsplit=1) 与上式等价
print(s2)
s3=s.rsplit('|',1)
print(s3)
# Python学习
# 文件名称: find.py
# 学习时间: 2022/7/6 9:08
# 字符串的查询操作方法
# 查询方法:
# index() 查找子串substr第一次出现的位置,如果查找的子串不存在,
# 则抛出ValueError
# rindex() 查找子串substr最后一次出现的位置,如果查找的子串不存在,
# 则抛出ValueError
# find() 查找子串substr第一次出现的位置,如果查找的子串不存在,
# 则返回-1
# rfind() 查找子串substr最后一次出现的位置,如果查找的子串不存在,
# 则返回-1
s='hello.hello'
print(s.index('lo')) #返回3,是第一个lo
print(s.rindex('lo')) #返回9,是最后一个lo
print(s.find('.he')) #返回5
print(s.rfind('bv'))
# Python学习
# 文件名称: formatting.py
# 学习时间: 2022/7/6 11:36
# 格式化字符串
# 格式化字符串的两种方式
# %作为占位符, 定义的格式化字符串 '我的名字叫:%s,今年%d岁了' %(固定符号) (name,age)
name='张三'
age=21
print('我叫%s,今年%d岁了' % (name,age))
# {}作为占位符, '我的名字叫:{0},今年{1}岁了,我真的叫{0}'.format(name,age)
print('我的名字叫{0},我今年{1}岁了,我真的叫{0}'.format(name,age))
# f-string
print(f'我叫{name},今年{age}岁')
'''demo'''
print('%10d' % 99) # 10表示宽度
print('%f' % 3.141592653579)
print('%.3f' % 3.141562653579)
# 同时保留宽度和精度
print('%10.3f' % 3.141592653579)
print('hellohello')
'''demo2'''
print('{0}'.format(3.141592653579))
print('{0:.3}'.format(3.1415926535)) # .3表示3位有效数字
print('{0:.3f}'.format(3.141592653579)) # .3f表示3位小数
print('{0:10.3f}'.format(3.141592653479)) #10位宽度,3位小数
# Python学习
# 文件名称: judge.py
# 学习时间: 2022/7/6 10:15
# 判断字符串操作的方法
# 判断字符串的方法
# isidentifier() 判断指定的字符是不是合法的标识符
# 标识符:26个英文单词,10个数字(0-9),下划线_
# isspace() 判断指定的字符串是否全部由空白字符组成(回车、换行、水平制表符)
# isalpha() 判断指定的字符串是否全部由字母组成(可以是字母,汉字)(不能为罗马数字)
# isdecimal() 判断指定字符串是否全部由十进制数字组成
# isnumeric() 判断指定的字符串是否全部由数字组成(可以是汉字数字或罗马数字以及阿拉伯数字)
# isalnum() 判断指定的字符串是否全部由字母和数字组成
s='hel23lo_python'
print('1.',s.isidentifier())
s=' \t\n'
print('2.',s.isspace())
s='dargsdfa'
s1='z张三'
s_1='四'
s_2='Ⅳ'
print('3.',s.isalpha())
print(s1.isalpha())
print(s_1.isalpha())
print(s_2.isalpha())
s='5146454'
s_1='123四'
s_2='ⅠⅡ'
print('4.',s.isdecimal())
print(s_1.isdecimal())
print(s_2.isdecimal())
s='5465421016546'
print('5.',s.isnumeric())
print(s_1.isnumeric())
print(s_2.isnumeric())
s='alkjsdlka46434'
print('6.',s.isalnum())
# Python学习
# 文件名称: new_exist.py
# 学习时间: 2022/7/6 8:40
# 字符串:Python中基本数据类型,是一个不可变序列
# 字符串的驻留机制:创建相同字符串时,不开辟新的内存空间,仅指向已存在的空间
a='Python'
b="Python"
c='''Python'''
print(a,id(a))
print(b,id(b))
print(c,id(c))
# 驻留机制的几种情况(交互模式): 命令行情况
# 1.字符串的长度为0/1时
# 以下代码均在命令行下执行
s1=''
s2=''
s1 is s2
s1='%'
s2='%'
s1 is s2
# 2.符合标识符的字符串
# 标识符:含有字母、数字、下划线
s1='abc%'
s2='abc%'
s1==s2
s1 is s2
# 3.字符串只在编译时进行驻留,而非运行时
a='abc'
b='ab'+'c'
c=''.join(['ab','c']) # join是在程序运行时才处理,所以a与c不在一个空间
a is b
a is c
# 4.[-5,256]之间的整数数字
a=-5
b=-5
a is b
a=-6
b=-6
a is b
# sys中的intern方法强制2个字符串指向同一个对象
import sys
a='abc%'
b='abc%'
a is b
a=sys.intern(b)
a is b
# Pycharm对字符串进行了优化处理,对一些原本不能驻留的字符串进行了驻留
# 字符串驻留机制的优缺点:
# 当需要值相同的字符串时,可以直接从字符串池里拿来使用,避免频繁的创建和销毁,提升效率和节约内存
# 因此拼接字符串和修改字符串是会比较影响性能的
# 在需要进行字符串拼接时建议使用str类型的join方法,而非‘+’,因为join()方法是先计算出所有字符
# 中的长度,然后再拷贝,只new一次对象,效率要比‘+’高
# Python学习
# 文件名称: replace_join.py
# 学习时间: 2022/7/6 10:59
# 字符串的其他操作
# 字符串替换 replace() 第一个参数指定被替换的子串,第二个参数指定替换子串的字符串
# 该方法返回替换后得到的字符串,替换前的字符串不发生变化,
# 调用该方法时,可以通过第三个参数指定最大替换次数
# 字符串合并 join() 将列表或元组中的字符串合并成一个字符串
s='Hello,Python,lo'
print(s)
print(s.replace('lo','ol'))
print(s.replace('lo','ol',1))
list1=['hello','python','python']
print('+'.join(list1))
print('|'.join(list1))
print(list1)
t=('hello','python','java')
print('.'.join(t))
print('*'.join('Python'))
# Python学习
# 文件名称: slice_up.py
# 学习时间: 2022/7/6 11:20
# 字符串的切片操作
# 字符串是不可变类型,不具备增删改等操作,切片操作将产生新的对象
s='Hello,python'
s1=s[:5]
s2=s[6:]
s3='!'
s_new=s1+s3+s2
print(s1)
print(s2)
print(s_new)
print('——————————————————')
print(id(s))
print(id(s1))
print(id(s2))
print(id(s3))
print(id(s_new))
print('————————切片:[start:end:step]——————————')
print(s[1:5:1])
print(s[::2]) #开始0,结束末尾,步长2
print(s[::-1]) # 步长为正,则从头到尾,步长为负,从尾到头
print(s[:-7:1])
print(s[-6::])
byte=s.encode(encoding='GBK') # 编码
print(byte.decode(encoding='GBK')) # 解码
byte_2=s.encode(encoding='UTF-8') # 编码
print(byte_2.decode(encoding='UTF-8')) # 解码
# Python学习
# 文件名称: compare.py
# 学习时间: 2022/7/6 11:10
# 字符串的比较操作:
# 运算符:> < >= <= == !=
# 比较规则:首先比较两个字符串中的第一个字符,如果相等则继续比较下一个字符,依次比较下去,
# 知道两个字符串中的字符不相等时,其比较结果就是两个字符串的比较结果,两个字符串中的
# 后续字符将不再被比较
# 比较原理:两个字符进行比较时,比较的是其ordinal value(原始值),调用内置函数ord可以
# 得到指定字符的ordinal value。与内置函数ord对应的是内置函数chr,调用内置函数chr
# 时指定ordinal value可以得到其对应的字符
print(ord('d'))
print(chr(100))
print(ord('杨'))
print('yyd'>'djdi')
''' == 与 is 的区别
== 比较的是 value
is 比较的是 id
'''