# 20200928 格式化字符串
# 有个例子:
# a = 3
# b = 5
# print(str(a)+'+'+str(b)+'='+str(a+b))#但是这样写太麻烦了
# 格式化字符串 方案一
# print('%s+%s=%s' % (a, b, a + b))
# 因为是字符串所以用的%s,如果是数字用%d。%f表示浮点类型
# info='我叫%s,他叫%s,我今年%s岁'%('a','b',12) #百分号前后的参数需一致
#info='我叫%6s,他叫%6s,我今年%6s岁'%('a','b',12)
#可以在%后面添加数字n,表示至少有n位数,不足时用空格补齐,超过n位时显示完整的参数如下
# info='我叫%3s,他叫%3s,我今年%3s岁'%('啦啦彭于晏','b',12)
#print(info)
# info='我叫%s,他叫%s,我今年%05d岁'%('a','b',12)
# #对于数字(%d)而言,可以补0,写成%0nd,n是任意自然数,不足n位用0补齐,超过则显示完整
# print(info)
#在这个字符串格式化方案中,所有的字符都是右对齐,如果需要左对齐,添加一个符号。如:
# info='我叫%-5s,他叫%-5s,我今年%0-5d岁'%('a','b',12)
# print(info)
#%f 浮点型,%m.nf m表示最少显示多少位,不足用空格补齐 n表示保留多少位小数 eg:
# num='%6.6f'%(3.1) #显示的是3.100000
#num='%6.6f'%(3.1415926) #显示的是3.141593(这里是五舍六入)
# num='%6.2f'%(3.1) #显示的 3.10,不足用空格补齐
# # num='%06.2f'%(3.1) #得003.10,表示最少显示6位,不足用0补齐,保留两位小数
# print(num)
#方案二
# s='我的名字是{},他的名字是{},年龄是{}'.format('aa','bb',66)
# print(s)
#补齐方法 {:n} n表示最少显示n位 超过全部显示
# s='我的名字是{:6},他的名字是{:3},年龄是{:6}'.format('aabbccdd','bb',66)
# print(s) #在这个方案中,字符串默认左对齐,数字默认右对齐。
# s='我的名字是{:6},他的名字是{:3},年龄是{:06}'.format('aa','bb',66)
# print(s) #数字可以{:0n},表示最少显示n位,不足在数字左边用0补齐
# s='我的名字是{:>6},他的名字是{:^6},年龄是{:^06}'.format('aa','bb',66)
# print(s) #>号表示右对齐,<号表示左对齐。默认是左对齐。^表示居中对齐
#此处得:我的名字是 aa,他的名字是 bb ,年龄是006600
#在这个方案中是可以随意补0 但是字符串补0必须得加上大于或者小于号
# s='我的名字是{:>06},他的名字是{:<06},年龄是{:^06}'.format('aa','bb',66,67)#这是一个元组
# print(s) #我的名字是0000aa,他的名字是bb0000,年龄是006600
# #前后参数对比,前面的参数比后面的多,会报错,后面的参数比前面的对,不会报错
#下标取值法:直接在{}的冒号前面输入元组中的下标达到改变值的方法
# s='我的名字是{1:*>6},他的名字是{0:<06},年龄是{3:^06}'.format('aa','bb',66,67)#这是一个元组
# print(s)
#如果本来就想显示{},用{{}},但是如果{}里面同时向显示参数怎么办?再加一层、
# s='我的名字是{{:>06}},他的名字是{:<06},年龄是{:^06}'.format('aa','bb',66,67)#这是一个元组
# print(s) #得我的名字是{:>06},他的名字是aa0000,年龄是00bb00,没有显示出{}里面的参数
# s='我的名字是{{{:>06}}},他的名字是{:<06},年龄是{:^06}'.format('aa','bb',66,67)#这是一个元组
# print(s) #得我的名字是{0000aa},他的名字是bb0000,年龄是006600。完成了预期想法
#在方案二中有一种更简便的写法,但是必须是python3.6以上才可以使用
# name1='aoe'
# name2='ywu'
# print(f'我的是{{{name1}}},你的是{name2}') #正常写法
# print(f'我的是{{{name1:>6}}},你的是{name2:^9}')
#得我的是{ aoe},你的是 ywu ,一样可以用方案2的补齐方法
#全局变量 局部变量
# a=3 #全局变量,任何地方的代码都可以用.顶格写
# def fun1(): #定义一个函数
# global b #声明一个全局变量,即让函数内的变量全局内可用。如果是globle的全局变量a,那a会被重新赋值
# b=6 #局部变量,只能在函数内使用
# return b #必须有返回一下
# fun1() #在函数外调用该函数,就可以让b被赋值的语句执行一次
# print(a,b) #打印结果是:6
# 心田老师授课:字符串的格式化:
'''
本节课大纲:
1- 字符串格式化方法一
2- 字符串格式化方法二
拓展第三种方法,做个了解,在python3.6以后常用f直接替代了第三种方法
字符串格式化的作用:在字符串里面传递一个参数,更简便地表达一个字符串
'''
# 为什么要用到字符串呢?为了提高代码的简易性和可读性.如果没有格式化,举个栗子"
# name = 'Tom'
# age = '23' #把我叫Tom,今年23岁表示出来
# info='我叫'+name+','+'今年'+age+'岁了.'
# print('我叫'+name+','+'今年'+age+'岁了.') #我叫Tom,今年23岁了.
# print(info) #打印的还是;我叫Tom,今年23岁了. 但是代码的简易性明显提高了很多
# 字符串的格式化:往字符串里面传递参数.也就是去表达一个字符串
# 1- 格式化方法一:百分号占位法.
#把既定的变量用百分号%s占位,然后往字符串里面传递参数
# name = 'Tom'
# age = 23
# info = '我叫%s,年龄是' % name #注意一定要加s,s代表的是字符串
# print(info) #打印得:我叫Tom,年龄是.name被传进去了
#以上是传一个参数的演示方法,如果是要传两个,那就一定要用元组传!!
# name = 'Tom'
# age = 23
# info='我叫%s,今年%d岁了'%(name,age) 岁还可以用%d占位
# print(info) #打印得:我叫Tom,今年23岁了,提高了代码的可读性和简易性
'''
一.value可以是:
1-普通的数值对象,字符串对象
2-Tuple,表示多个对象填充format里面的占位符%
符号的意义:
1- %s,表示用str()类型进行字符串的格式化
2- %d,表示有符号十进制数
3- %f,表示转成浮点数,小数部分自然截断
4- %x,表述转成无符号十六进制数(x/X表示转换后的十六进制字符串的大小写)
十六进制是:0-9,a-f
'''
# 字符串格式化之-%的常见用法:指定宽度:
# age=23
# info='我今年%d岁了'%age
# print(info) #打印得:我今年23岁了
# infoa='我今年%10d岁了'%age #表示百分号后面的age变量最少宽度有十位,不足十位用空格补齐
# print(infoa) #打印得:我今年 23岁了 #有8个空格,加上23一共十个宽度
# infob='我今年%010d岁了'%age #补空格的地方补零
# print(infob) #打印得:我今年0000000023岁了
# 上诉例子简易版:
# print('%d'%56) #打印得:56
# print('%8d'%56) #打印得:补齐八位, 56 有6个空格,补齐了百分号后面的参数八位
# print('%08d'%56) #打印得:补齐八位,00000056 有6个0,原本是空格的地方都补0了
# print('%-8d'%56) #打印得:56 ,如果加上符号,则是左补齐.补0则不能左对齐右补零,会影响数据大小
# %f浮点型知识点讲解
# 1- 默认存入不超过小数点后六位
# 2- 小数点后六位之后五舍六入
# 3- 注意浮点型指定保留小数点后几位,不是直接在f前面加数字,而是加.数字,表示保留小数点后几位
# 4- 小数点前面的数字,代表的是这个小数整体的位置长度,右对齐,不足补空格
# 5- 在规定了浮点数整体宽度,即小数点前面有数字的时候,可以在其前面加上负号表示左对齐
# 6- 如果规定的宽度小于小数点本身的宽度,则无视规定按照其他规则来
# 7- 在规定了浮点数整体宽度,即小数点前面有数字的时候,可以在其前面加上0,右对齐,不足宽度补0
# print('%f'%3.1415925) #浮点型数据,存入默认小数点后六位,打印得:3.141592,五舍六入
# print('%.3f'%3.1415926) #打印得:3.142
# print('%6.3f'%3.1415926)#打印得: 3.142,加上小数点,一共只有五位,补足了一空格
# print('%-6.3f'%2.36658) #打印得:2.367 .左对齐,右边补了一个空格
# print('%1.3f'%8.92873756) #无视宽度为1的规定,遵守保留小数点后三位的规则,打印得:8.929
# print('%09.3f'%8.92873756) #打印得:00008.929,不足的位数补0处理
# print('%-09.3f'%8.92873756) #打印得:8.929 ,没有左对齐补0的操作,如果一定要左对齐,则忽视补0的规则直接补空格
# 2-- 字符串格式化方法二: 字符串.format()
# *1.顺序填值,前面的{}一定要小于等于值的个数,即位置不能空着,值可以空着.否则会报错
# print('my name is {},i am {} years old'.format('Tom','23','1'))#后面大于前面,依此取值,之后的值取不到了
# 1-1 顺序填值还可以指定宽度 格式 {:方向宽度}
# print('我在{:6}边,捡到{:6}分钱'.format('马路',1)) #打印得:我在马路 边,捡到 1分钱
# 字符串跟数字对齐方式不一样,字符串是左对齐,数字是右对齐,在前面补空格
# 1-2 因为字符串和数字对齐方式不一样,可以用>表示右对齐,<表示左对齐,指定元素的对齐方向
# print('我在{:>6}边,捡到{:<6}分钱'.format('马路',1))#打印得:我在 马路边,捡到1 分钱
# 1-3 补齐元素,指定方向补齐元素,在:和<>号中间补,可以补任何东西,如:
# str='我在{:&>6}边,捡到{:*<6}分钱' #注意是在冒号和大小于号中间补,补什么都可以
# print(str.format('马路',1)) #打印得:我在&&&&马路边,捡到1*****分钱
# *2.下标填值.可以顺序传值.倒序传值.重复传值.只能穿下标位置有值的元素,否则会报错
# print('my name is {1},i am {0} years old'.format('23','Tom','1'))#后面值可以大于前面
# 关于补齐.对准操作,format方法都是通用的,如:
# print('my name is {1:6},i am {0:6} years old'.format('23','Tom','1'))
# 打印得:my name is Tom ,i am 23 years old,冒号前面是下标,后面是指定补的东西.对齐方向和总宽度
# print('my name is {1:非<6},i am {0:不<6} years old'.format('23','Tom','1'))
# 打印得:my name is Tom非非非,i am 23不不不不 years old
# *3.变量填值
# print('my name is {name:*<6},i am {age:*<6} years old'.format(age='23',name='Tom'))
# 打印得:my name is Tom***,i am 23**** years old
# 最常用的字符串格式方法,替代了格式化方法3,且比方法三方便很多:python3.6以后可以用
# lu='马路'
# qian=1
# info=f'我在{lu:6}边,捡到{qian:*<6}分钱' #直接加f 然后再在引用变量名就可以了
# print(info)#我在马路 边,捡到1*****分钱 #.format可以用的对齐补齐方法它都可以用
# 使用场景:接口自动化