回顾
重点:一切皆对象
难点:不可变对象和可变对象
例子:分析:元组是可变对象,所以改变其中的某一个,其他都跟着改变
a = 100
b = a
b = b+1
print(a)
print(b)
a1 = [1,2,3]
b1 = a1
b1.append(4)
print(a1)
print(b1)
c1 = a1
c1.append(5)
print(a1)
print(b1)
print(c1)
结果:
100
101
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
新
1、input输入,不论输入什么都会是str形式
a = input("请输入一个整数:")
print(a)
print(type(a))
结果如下:
请输入一个整数:1
1
<class 'str'>
2、选择结构
- 分为单分支、双分支和多分支
- 条件为假:
- false
- 空字符串“”
- 0、[]、()、{}
3、可迭代对象(iterable)
- 系列,例如字符串(str)、列表(list)、元组(tuple)
- 字典
- 文件对象
- 迭代器对象
- 生成器函数
4、break提前结束循环
结束本次循环,即跳出循环体内自continue下面尚未执行的语句,返回到循环的起始处,并根据循环条件判断是否执行下一次循环
continue语句与break语句的区别
continue语句仅结束本次循环,并返回到循环的起始处,循环条件满足的话就开始执行下一次循环
而break语句则是结束循环,跳转到循环的后继语句执行
i=1
while(i<10):
print(i)
i = i+1
if(i==5):
break
else:
print("这是else")
break会跳出else
continue语句实战
【例3.15】使用continue语句跳过循环。要求输入若干学生成绩(按Q或q结束),如果成绩<0,则重新输入。统计学生人数和平均成绩
num = 0;scores=0#初始化学生人数和成绩和
while True:
s = input("请输入学生成绩(按Q或者q结束):")
if s.upper()=='Q':
break
if float(s)<0:
continue
num+=1#统计学生人数
scores+=float(s)#计算成绩之和
print('学生人数:',num);print('平均成绩为:',scores/num)
5、Python format格式化函数
Python2.6
之后才有的格式化字符串的函数,str.format()
,它增强了字符串格式化的功能,基本语法就是通过{}
和:
来替代以前的 %
format函数可以接受不限个参数,位置可以不按顺序。
print(str.format("{0:<5}",i), end="") #每个数占5个位置,不足后面加空格,并且不换行
实战
print("{} {}".format("hello","world"))#不设置指定位置,按默认顺序
print("{0},{1}".format("hello","world"))#设置指定位置
print("{1},{1},{0}".format("hello","world"))
print("网站名:{name},地址:{url}".format(name="未晞~",url="www.baidu.com"))
# 通过字典设置参数
site = {"name":"未晞~","url":"www.baidu.com"}
print("网络名:{name},地址{url}".format(**site))
# 通过列表索引设置参数
my_list = ['未晞~','www.baidu.com']
print("网络名:{0[0]},地址{0[1]}".format(my_list))#"0"是必须的
hello world
hello,world
world,world,hello
网站名:未晞~,地址:www.baidu.com
网络名:未晞~,地址www.baidu.com
网络名:未晞~,地址www.baidu.com
注:
*b这个位置可以接收任意多个(也可以是0个)非关键字参数,并将其打包成元组。
**b这个位置可以接收任意多个(也可以是0个)关键字参数,并将收集到的参数转换成一个字典。
6、典型代码
6.1、单分支结构实例
一、# 单分支结构:输入两个数a和b,比较两者大小,使得a>b
a = int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))
print(str.format("输入值:{0},{1}",a,b))
if(a<b):
t=a
a=b
b=t
print(str.format("降序值:{0},{1}",a,b))
6.2、while循环实例
# 用如下近似公式求自然对数的底数e的值,直到最后一项的绝对值小于10-6为止
i = 1;e = 1;t = 1
while(1/t>=pow(10,-6)):
t*=i
e+=1/t
i+=1
print("e=",e)
程序运行结果如下图:
6.3、典型代码
7、选择语句实战——判断闰年
import calendar
year = int(input())
print("=======================使用一个逻辑表达式包含所有的闰年条件=========================")
if((year%4==0 and year%100!=0) or year % 400==0):
print("是闰年")
else:
print("不是闰年")
print("==============使用嵌套的if语句==========================")
if(year%400==0):print("是闰年")
else:
if(year%4==0):
if(year%100==0):
print("是闰年")
else:print("不是闰年")
print("==================使用if-elif语句=======================")
if(year%400==0):print("是闰年")
elif(year%4!=0):print("不是闰年")
elif(year%100==0):print("不是闰年")
else:print("是闰年")
print("=======================使用calendar模块的isleap函数判断闰年====================")
if(calendar.isleap(year)):print("是闰年")
else:print("不是闰年")
答案
2000
=使用一个逻辑表达式包含所有的闰年条件===
是闰年
使用嵌套的if语句============
是闰年
使用if-elif语句=====
是闰年
===使用calendar模块的isleap函数判断闰年
是闰年
八、九九乘法表(最全三角)
第一种,左下三角
for i in range(1,10):
s = ""
for j in range(1,i+1):
s +=str.format("{0:1}*{1:1}={2:<4}",i,j,i*j)
print(s)
程序运行结果如下:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
第二种,左上三角
for i in range(1,i):
s= " "
for j in range(i,10):
s+=str.format("{0:1}*{1:1}={2:<4}",i,j,i*j)
print(s)
程序运行结果如下:
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
第三种,右上三角
for i in range(1,10):
s = " "
for j in range(1,i):
print(end=" ")
for k in range(i,10):
s+=str.format("{0:1}*{1:1}={2:<4}",i,k,i*k)
print(s)
程序运行结果如下:
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*6=36 6*7=42 6*8=48 6*9=54
7*7=49 7*8=56 7*9=63
8*8=64 8*9=72
9*9=81
第四种 右下三角
for i in range(1,10):
s=" "
for j in range(1,10-i):
print(end=" ")
for k in range(1,i+1):
s+=str.format("{0:1}*{1:1}={2:<4}",i,k,i*k)
print(s)
运行结果如下:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
矩阵三角
for i in range(1,10):
s=""
for j in range(1,10):
s+=str.format("{0:1}*{1:1}={2:<4}",i,j,i*j,end="\t")
print(s)
程序运行结果如下
1*1=1 1*2=2 1*3=3 1*4=4 1*5=5 1*6=6 1*7=7 1*8=8 1*9=9
2*1=2 2*2=4 2*3=6 2*4=8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1=3 3*2=6 3*3=9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*1=4 4*2=8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
九、Python内置数据类型概述
Python语言中,一切皆为对象,而每个对象都属于某个数据类型
Python的数据类型包括内置的数据类型、模块中定义的数据类型和用户自定义的类型
数值数据类型: int、bool、float、complex
序列数据类型: 不可变(str、tuple、bytes)和可变(list、bytearray)
集合数据类型: set、frozenset字典数据类型:dict。例如:{1: “one”, 2: “two”}
NoneType、NotImplementedType和EllipsisType
math.fabs()与abs()区别
Python 中 fabs (x) 方法返回 x 的绝对值。
虽然类似于 abs () 函数,但是两个函数之间存在以下差异: abs () 是一个内置函数,而 fabs () 在 math 模块中定义的。
fabs () 函数只适用于 float 和 integer 类型,而 abs () 也适用于复数。
十、zip函数和循环
zip()函数 将多个可迭代的对象中对应的元素打包成一个个元组,然后返回一个由这些元组组成的列表。如果元素个数不一致,则返回列表长度与最短的对象相同。
利用于运算符*,还可以实现将元祖解压为列表
x = [1,2,3]
y = [3,4,5]
zip(x,y)
print(zip(x,y))#<zip object at 0x000001AC42957A00>
list(zip(x,y))
print(list(zip(x,y)))#[(1, 3), (2, 4), (3, 5)]
a,b = zip(*zip(x,y))
print(a,b)#(1, 2, 3) (3, 4, 5)
# zip函数和并行循环
evens = [0,2,4,6,8]
odds = [1,3,5,7,9]
for e,o in zip(evens,odds):
print("{0}*{1}={2}".format(e,0,e*o))
程序运行结果如下图:
十一、map()函数和循环
如果需要遍历可迭代对象,并使用指定函数处理对应的元素,则可以使用Python的内置函数map()。
map(func,seq[,seq2,…])函数将func作用于seq中的每一个元素,并将所有的调用结果作为可迭代对象返回。如果func为None,该函数的作用等同于zip()函数。
例如,如果要返回列表中的每个字符串的长度,可以使用内置的map()函数和len()函数。
print(map(len,['Spring','Summer','Fall','Winter']))
print(list(map(len,['Spring','Summer','Fall','Winter'])))
运行结果如下:
<map object at 0x000002A578BA7310>
[6, 6, 4, 6]
实战
# 例子
print(list(map(abs,[-1,1,2,-7])))#计算绝对值,输出:[1, 1, 2, 7]
print(list(map(pow, range(5),range(5))))#计算乘幂,几的几次方,输出:[1, 1, 4, 27, 256]
print(list(map(ord,'abcdef')))#计算ASCII码,输出:[97, 98, 99, 100, 101, 102]
print(list(map(lambda x,y:x+y,'abc','de')))#字符串拼接,输出:['ad', 'be']
十二、enumerate
Python语言的for循环直接迭代对象集合中的元素,如果需要在循环中使用索引下标访问集合元素,则可以使用内置的enumerate()函数。
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
print(list(enumerate(["a","b","c"])))
print(list(enumerate(["a","b","c"],10)))
程序运行结果如下:
[(0, 'a'), (1, 'b'), (2, 'c')]
[(10, 'a'), (11, 'b'), (12, 'c')]
语法:enumerate(sequence, [start=0])
参数
- sequence – 一个序列、迭代器或其他支持迭代对象。
- start – 下标起始位置的值。
返回值
返回 enumerate(枚举) 对象。
十三、lambda
lambda a,b :a+b #匿名函数,lambda表达式