Day4知识回顾
嵌套循环的时间对比
- 引入time模块
- python将1970一月一日设置为第一天,time方法的得到的结果是从第一天到这行代码被执行的总秒数
import time
print(time.time())
- 比较循环时间(以百马百担为例),比较两个嵌套循环的执行时间。
start = time.time()
couny =0
for zhongma in range(1,51):
for xiaoma in range(100-zhongma):
dama = 100 - zhongma-xiaoma
if dama*3 + zhongma*2 + xiaoma//2 == 100:
couny+=1
print(f'大马有{dama}匹,中马有{zhongma}匹,小马有{xiaoma}匹,有{couny}种')
end = time.time()
print(f'执行这行代码花了{end - start}秒')
结果输出:执行这行代码花了0.0009999秒
start1 = time.time()
for i in range(0, 35):
for j in range(0, 51):
for z in range(0, 101):
if i + j + z == 100 and 6 * i + 4 * j + z == 200:
print(f'大马{i}匹,中马{j}匹,小马{z}匹')
end1 = time.time()
print(f'执行这行代码花了{end1 - start1}秒')
结果输出:执行这行代码花了0.020000696秒
random随机模块及break、continue关键字
import random
num = random.randint(1,100)
flag = True
while flag:
selfNum = int(input("请输入您猜的数字:"))
if selfNum > num:
print("再猜小一点")
elif selfNum< num:
print("猜大一点")
else:
print(('猜对了!!!'))
break
print("=============================")
flag = False
for i in range(1,21):
if i%3==0:
print("*&*********")
continue
print('+++++++++++')
else:
print(i)
for - else的使用
应用场景:当所有情况都判断完才能下结论时使用for - else语句
"""
语法:
for 变量 in 容器:
代码块
else:
代码块
当for循环正常结束时,else语句正常被执行,当for循环非正常结束,else语句不被执行
break,return等关键字会影响for循环的正常结束。
"""
案例:判断1–100之间的所有素数(质数)
for i in range(1,101):
if i == 1:
print(f'{i}不是素数')
elif i == 2:
print(f'{i}是素数')
else:
for j in range(2,i):
if i%j == 0:
print(f'{i}不是素数,它有因子{j}')
break
else:
print(f'{i}是素数')
列表
- 性质
- 列表是可变的。(可以做修改,增删改)
- 列表是有序的。(每个元素有自己的固定位置)
- 列表的容器标志是[ ],列表的类型是list。
- 列表中可以存放任意类型的数据.
- 列表中允许出现重复元素
- 创建列表,查看列表长度,列表的重复和拼接
# 创建一个空列表
list1=[]
list2 = list()
# 创建一个非空的列表
list3 = [1,1.1,'haghsjd',[21378,'jhdaj'],None,(1,23,4)]
# 查看容器中元素的个数
print(len(list3))
# 拼接
list1 = [2,3,4]
list2= [2,32,1]
list3= [2,334,3]
list4 = list3+list1+list2
# 重复
print(list1*5)
下标和切片
-
下标:有序容器中,每个元素的位置索引,下分为正向下标和负向下标。
-
正向下标:从0开始,从左到右依次递增。
-
负向下标:从-1开始,从右向左依次递减。
-
-
利用下标获取元素
list =['王者荣耀','阴阳师','和平精英','光遇']
print(list[1])
print(list[-3])
-
切片:获取有序容器中部分元素,语法:容器[start:end:step]
- start和end可以使用正向下标和负向下标,切片也是左闭右开区间。
- step默认为1可以不写,表示从左向右取元素start,end也都可以不写,表示代表开头结尾。
- 如果step>0.end对应的元素必须再start对应元素的后面.下一次获取的元素为本次获取的元素的下标+步长
- 如果step<0,end对应的元素必须再对应元素的前边,下一次获取的元素为本次获取的元素的下标+步长
- 练习:
list2 = ['柯南','百变小樱','奥特曼','甄嬛传','海贼王','火影忍者','斗破苍穹'] # 1,获取['柯南,'奥特曼','海贼王','斗破苍穹'] print(list2[::2]) # 2.获取['斗破苍穹','甄嬛传','柯南'] print(list2[-1::-3]) # 3.获取['奥特曼','百变小樱','柯南'] print(list2[-5::-1]) # 4.获取['柯南'] print(list2[:1]) # 5获取'柯南' print(list2[0])
- 注意:下标不能越界,切片可以越界
遍历
- 直接遍历(输出列表的元素)
list1 = ['A', 'B', 'C', 'D']
for i in list1:
print(i)
- 间接遍历
for index in range(len(list1)):
print(f'下标{index}---->元素{list1[index]}')
间接遍历输出为:
列表的增删改
- 增加
- append:在列表的末尾追加一个元素
- insert:在列表的任意一个位置添加元素
- extend:将一个容器中元素添加到列表中
- 修改
- 直接通过下标修改元素
- 删除
- del:通过下标删除元素,下标超出范围,报错
- remove:删除指定的元素,要删除的元素不存在,报错,一次只删除一个元素,从左向右删除
- pop:通过下标删除元素,下标超出范围,报错。pop删除的元素还可以被找到
- clear:清空列表
案例:生者死者游戏。
30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?
peopleList = []
for i in range(1,31):
peopleList.append(i)
while len(peopleList) >15:
num = 1
while num<9:
peopleList.append(peopleList.pop(0))
num+=1
p = peopleList.pop(0)
print(p)
print(peopleList)
输出结果:
被踢除掉的有:
9,18,27,6,16,26,7,19,30,12,24,8,22,5,23
列表剩余的有:
[25, 28, 29, 1, 2, 3, 4, 10, 11, 13, 14, 15, 17, 20, 21]