从零开始的python学习Day4

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关键字

  • break循环关键字

    案例:数字炸弹游戏

    注意:当break被触发时,直接结束break所在循环。

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
  • continue循环关键字

    continue:触发仅结束当前循环

    案例

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)

下标和切片

  1. 下标:有序容器中,每个元素的位置索引,下分为正向下标和负向下标。

    • 正向下标:从0开始,从左到右依次递增。

    • 负向下标:从-1开始,从右向左依次递减。

  2. 利用下标获取元素

list =['王者荣耀','阴阳师','和平精英','光遇']
print(list[1])
print(list[-3])
  1. 切片:获取有序容器中部分元素,语法:容器[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]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值