目录
字符串格式化
%格式符
format字符串格式化
三元条件运算符
可迭代对象
break和continue语句
enumerate函数
序列封包
序列解包
部分序列解包
append.列表和extend.列表的区别
字符串格式化
print('学生人数%d,平均成绩%2.1f'%(15, 81.2))
print('学生人数{},平均成绩{}'.format(15, 81.2))
print(str.format('学生人数{0},平均成绩{1:2.1f}',15, 81.2))
%格式符
print( ‘ 字符串 % 格式字符 1 字符串 % 格式字符 2 字符串 ‘ %( 变量 1, 变量 2))
print('我叫%s今年%d岁!'%('小明',10))
我叫小明今年10岁!
print('圆周率%s保留三位小数为%.3f'%('pi',3.1415926))
圆周率pi保留三位小数为3.142
format字符串格式化
print(‘ 字符串 { 标识 *} 字符串 { 标识 *} 字符串‘ .format( 变量 1, 变量 2))
标识*与顺序无关。
print('圆周率{}为{}'.format('pi',3.1415926))
圆周率pi为3.1415926
print('圆周率{}保留三位小数为{:+.3f}'.format('pi',3.1415926))
圆周率pi保留三位小数为+3.142
print('圆周率{1}保留三位小数为{0:.2e}'.format(31415926,'pi'))
圆周率pi保留三位小数为3.14e+07
错误代码实例
print('今年我的wish是{1:+.2f}'.format(4.9815926535))
Traceback (most recent call last):
File "C:\Users\Administrator\Desktop\1.py", line 5, in <module>
print('今年我的wish是{1:+.2f}'.format(4.9415926535))
IndexError: Replacement index 1 out of range for positional args tuple
Process finished with exit code 1
这里的代码输出是错误的,因为超出了元组tuple的range,说明format后面括号对应的数据类型为元组,而所写索引为对应的元组索引,因为上述例子对应的索引最大值为0所以使用1会报错。
纠正错误后
print('今年我的wish是{0:+.2f}'.format(4.9815926535))
冒号前面表示对应的元组索引起始位置,冒号后面对应的是数据输出格式,这里的加号指的是正数要输出加号,后面的"."以及后面的数值表示输出的精度,f表示对应的数据类型float。
str.format( 格式化字符串,值 1 ,值 2 ,值 3)
str.format('圆周率{}保留两位小数为{:.3}','pi',3.1415926)
'圆周率pi保留两位小数为3.14'
print(str.format('圆周率{}保留两位小数为{:.3}','pi',3.1415926))
'圆周率pi保留两位小数为3.14'
程序流程控制
三元条件运算符
条件为真时的值 if (条件表达式) else 条件为假时的值
实例1
y = (math.sin(x) + 2 * math.sqrt(x + math.exp(4)) - math.pow(x + 1, 3)) if ((x>=0))
else \
(math.log(-5 * x) - math.fabs(x * x - 8 * x) / (7 * x) + math.e)
实例2
a=3
b=4
max=a if a>b else b
print(max)
注意:此处的else后面直接写赋给max的数值,而不是写max=b否则会报错。
错误代码
a=3
b=4
max=a if a>b else max=b
print(max)
C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps\\1.py"
File "C:\Users\Administrator\Desktop\code\1.py", line 3
max=a if a>b else max=b
^^^^^
SyntaxError: invalid syntax. Maybe you meant '==' or ':=' instead of '='?
Process finished with exit code 1
此外,三目运算符中还可以放置多条语句有以下两种方式:
1、 使用英文逗号隔开,每条放置的语句都会执行,程序返回多条语句的返回值组成的元组:
b = 3 + 1, "3 > 2",print('AAA') if 1 > 2 else print("BBB"),2 + 2
print (b)
BBB
(4, '3 > 2', None, 4)
上面的例子中,因为 1 > 2
是False
,所以执行并返回3 + 1,"3 > 2",2 + 2,print("BBB")
这四条语句,由于print()函数没有返回值,故返回None
2. 使用英文分号隔开,每条语句都会执行,但程序只会返回第一条语句的返回值:
b = 1 + 1; "3 > 2";print('AAA') if 1 > 2 else print("BBB");2 + 2
print (b)
BBB
2
这里的if…else…执行print(“BBB”),返回的是第一条语句1 + 1的返回值2
可迭代对象
break和continue语句
对于break语句和continue语句,在C++语言中也在就见过,但是近期发现自己使用时还是没有做到灵活应用,归根结底还是概念的理解不到位。
break语句可以在满足一定条件时(本次的循环可以未结束),直接跳出循环(只能跳出一层循环,进入上一层)
而continue语句是在满足一定条件时(本次的循环可以未结束),直接进入下一次循环(i数值改变)
enumerate函数
enumerate(sequence,[start=1])
seasons = ['Spring', 'Summer', 'Autumn', 'Winter']
for i, s in enumerate(seasons, start=1): #start默认从0开始
print("第{0}季节:{1}".format(i, s))
组合数据类型
>>> import collections.abc
>>> isinstance((1,2,3),collections.abc.Iterable)
True
>>> isinstance("123",collections.abc.Iterable)
True
>>> isinstance(123,collections.abc.Iterable)
False
#for语句可实现自动迭代可迭代
对象的功能
>>> for i in ‘123’
>>> print(i)
>>> for i in (1,2,3)
>>> print(i)
>>> for i in range(8)
>>> print(i)
序列封包
变量=元素1,元素2,…,元素n
>>> a = 1, 2, 3
>>> print(a, type(a))
(1, 2, 3) <class 'typle'>
>>> a =[1, 2], [3,4], 'def'
>>> print(a, type(a))
([1, 2], [3,4], 'def') <class 'typle'>
序列解包
变量1,变量2,…,变量n=序列或可迭代对象
>>> a, b = (1, 2)
>>> a, b
(1, 2)
>>> a, b, c = (1, 2)
# ValueError: not enough values to unpack
>>> sid, name, sores = (1001,'张三', (80, 79, 90))
>>> sores
(80, 79, 90))
上述这个用法原来也没有仔细分析过,只觉得原来python能多个变量同时赋值,不知道这个叫做序列解包。
部分序列解包
>>> first, *middles, last = range(10)
>>> middles
[1, 2, 3, 4, 5, 6, 7, 8]
>>> first, second, third, *lasts = range(10)
>>> lasts #输出:
[3, 4, 5, 6, 7, 8, 9]
>>> *firsts, last3, last2, last1 = range(10)
>>> firsts #输出:
[0, 1, 2, 3, 4, 5, 6]
>>> first, *middles, last = sorted([70, 85, 89, 88, 86, 95, 89])
#去掉最高分和最低分
>>> sum(middles)/len(middles) #计算去掉最高分和最低分
后的平均值。
87.4
append.列表和extend.列表的区别
我们都知道append是尾加元素函数,假如append一个列表的话,就是直接把列表塞到原列表中。但是使用extend函数,是直接将列表的每个元素塞到原有列表中(或者说是两个列表直接进行拼接)。