每日反馈

非常耐心的解答问题,非常清楚的说明每一个知识点,非常棒(;`O´)o
讲的挺好的,就是自己要多练练

Day04 循环语句 字符串 - 图2

day03知识回顾

Day04 循环语句 字符串 - 图3

作业讲解

  1. # 编写代码模拟用户登陆。要求:用户名为 python,密码 123456,如果输入正确,打印“欢迎光临”,程序结束,如果输入错误,提示用户输入错误并重新输入
  2. name = "python"
  3. pwd = "123456"
  4. user_name = 1
  5. user_pwd = 1
  6. while user_name != name or user_pwd != pwd:
  7. if user_pwd != 1 and user_name != 1:
  8. print("用户输入错误!")
  9. user_name = input("请输入用户名:")
  10. user_pwd = input("请输入密码:")
  11. print("欢迎光临")

补01-循环控制:break[熟练使用]

# break,本意就是打破打坏的意思,用于终止循环,即执行了break之后,循环就不再执行了,直接执行下一句代码
# 举例: 上班是一个循环事件,辞职不干了,就是break

# 需求: 模拟吃苹果, 一共5个苹果,吃到第3个苹果,吃到半条虫子.
# for循环
for i in range(1,6):
    print(f'我正在吃第{i}个苹果')
    # 如果吃到第三个苹果时循环结束应该怎么做?
    if i == 3:
        print('吃到了半条虫子,又肥又壮,蛋白质真高,吃不下去了')
        break

print('吃苹果结束')

# while 循环

i = 1
while i <= 5:
    print(f'我正在吃第{i}个苹果')
    # 如果吃到第三个苹果,循环终止
    if i == 3:
        print('吃到了半条虫子,又肥又壮,蛋白质真高,吃不下去了')
        break
    i += 1

补02-循环控制:continue[熟练使用]

# continue:本意是继续的意思, 用于结束本次循环中未执行的内容,直接进入下一次循环判断
# 举例:  上班是一个循环事件,continue就类似于请一天假

# 需求: 模拟吃苹果 ,一共5个苹果, 吃到第三个,发现有一条虫子,这个苹果不吃了,继续吃下一个
# for
# for i in range(1, 6):
#     print(f'我正在吃第{i}个苹果')
#     # 判断吃到第三个苹果,不吃了,直接吃下一个
#     if i == 3:
#         print('妈呀,吃到了一条虫子,太恶心了,这个苹果不要了')
#         continue
#
#     print(f'第{i}个苹果吃完了')
#
# print('吃苹果结束')

# while循环
i = 1
while i <= 5:
    print(f'我正在吃第{i}个苹果')
    # 判断吃到第三个苹果,不吃了,直接吃下一个
    if i == 3:
        print('妈呀,吃到了一条虫子,太恶心了,这个苹果不要了')
        # 注意在while语句中使用continue要注意在continue之前循环变量必须自增,否则就会出现死循环
        i += 1
        continue

    print(f'第{i}个苹果吃完了')
    # 循环变量的自增如果放在continue 之后就会出现死循环现象,因为循环变量永远无法变化
    i += 1

print('吃苹果结束')

练习: 使用while语句打印1-5 当打印到3的时候,分别使用break 和continue跳过.

00-今日内容

  1. 循环收尾
    1. break和continue 的注意事项
    2. 循环中的else
    3. 报数游戏案例
  2. 字符串
    1. 字符串定义
    2. 字符串切片
    3. 字符串的常用操作
    4. 字符串的应用

      01-break和continue的注意事项[了解]

  • break 和continue只能用于循环体当中,如果再循环体外使用就会报错
  • break 和continue 只能控制其所在循环的循环体 ```python

    1. break 和continue只能用于循环体当中,如果再循环体外使用就会报错

    age = 18

    if age <= 18:

    print(123)

    SyntaxError: ‘break’ outside loop

    break不能再循环体之外使用

    break

SyntaxError: ‘continue’ not properly in loop

continue 不能应用在循环体之外

continue

在break 之后的所有代码将不会被执行

在本次循环中,continue 之后的所有代码将不会被执行

2. break 和continue 只能控制其所在循环的循环体

做四组动作, 每组动作 跑三圈

for i in range(4):

for j in range(3):

print(f’我跑了第{j + 1}圈’)

print(f’我已经完成了第{i + 1}组动作’)

题目一: 做完第二组运动太累了,结束运动

for i in range(4): for j in range(3): print(f’我跑了第{j + 1}圈’) print(f’我已经完成了第{i + 1}组动作’)

# 当第二组运动执行完成,则退出运动循环
if i + 1 == 2:
    # 此时break结束的是内层循环还是外层循环呢?
    # 外层循环控制运动组数,break减少了运动组数,所以控制的是外层循环
    print('跑步太累了,我放弃了')
    break

print(‘运动结束’)

print(‘—————————————————‘)

题目二: 第二组运动跑第一圈时,脚抽筋了,直接结束,等待做下一组运动

for i in range(4): for j in range(3): print(f’我跑了第{j + 1}圈’)

    # 在内层循环中,判断,当前运动是否为第二组第一圈
    if i + 1 == 2 and j + 1 == 1:
        # 如果是,则结束第二组运动,直接进行下一组
        print('我抽筋了,没法跑了,等下一组吧')
        # 外层循环控制运动的组数,内层循环中的break没有减少运动组数,但是减少了跑圈的数量
        # 证明内部的break 只控制了内层循环的循环体
        break
print(f'我已经完成了第{i + 1}组动作')

break和continue只能控制当前所在的循环,如果在内层循环就控制内层循环的循环结束和跳过,如果再外层循环,就控制外层的结束和跳过

continue探索方式相似,大家可以自行尝试


1. break控制外层循环

![image.png](https://cdn.nlark.com/yuque/0/2022/png/1280980/1656816725378-13e0d376-6a41-4a8b-b827-53e3f856264f.png#clientId=u23d35b40-8d8b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=327&id=u311b601b&margin=%5Bobject%20Object%5D&name=image.png&originHeight=490&originWidth=998&originalType=binary&ratio=1&rotation=0&showTitle=false&size=88247&status=done&style=none&taskId=uf6b7dad3-1da9-43d2-a000-5eab99bde08&title=&width=665.3333333333334)

2. break控制内层循环

![image.png](https://cdn.nlark.com/yuque/0/2022/png/1280980/1656816778316-45f83924-d6f9-4b78-aea0-8f1fe0fd828a.png#clientId=u23d35b40-8d8b-4&crop=0&crop=0&crop=1&crop=1&from=paste&height=297&id=uff737293&margin=%5Bobject%20Object%5D&name=image.png&originHeight=446&originWidth=1347&originalType=binary&ratio=1&rotation=0&showTitle=false&size=105524&status=done&style=none&taskId=ufa054c91-0b93-404b-b91f-6fff907f6d3&title=&width=898)
<a name="b5eDR"></a>
# 02-循环中的else语句[掌握]
```python
# 回顾: if语句中的else是什么意思??? 当判断 条件不满足时,执行else中的命令!!!!

"""
格式:
while 条件:
    当循环条件成立时反复执行循环体
else:
    当循环条件不满足时执行else中的代码块

注意: else中的命令不会反复执行,执行一次后,进入后续代码

for 临时变量 in 容器类型:
    当容器内的元素没有被遍历完时执行循环体
else:
    当容器数据全部被遍历完成后,执行else中的代码块

# 无论是for循环,还是else循环都是循环结束后,先执行else中的代码,再继续向下执行

#注意: 当循环异常终止时,else中的代码将不会被执行
# 换句话说,当我们没有执行到循环条件不满足的那一刻,循环就被终止了,则else中的代码不执行.

# while 循环不是因为循环条件不成立而终止的循环就是异常终止, 例如break
# for循环不是因为元素遍历完全了而终止的循环,就是异常终止, 例如break

break 可以造成循环的异常终止, 导致else中的代码不被执行
"""

# 需求: 下载学习视频,一共10个视频,全部下载完成则输出"视频全部下载成功", 否则不输出

# for i in range(1, 11):
#     print(f'第{i}个视频下载完成...')
# else:
#     print('视频全部下载完成.')

# 情况一: 下载到第六个视频时,网络出现问题,终止了下载
for i in range(1, 11):
    if i == 6:
        print(f'网络服务中断,下载结束!')
        break
    print(f'第{i}个视频下载完成...')
else:
    print('视频全部下载完成.')

i = 1
while i <= 10:
    if i == 6:
        print(f'网络服务中断, 下载结束!')
        break
    print(f'第{i}个视频下载完成....')
    i += 1
else:
    print('视频全部下载完成.')

# for和while中else使用方式一致

# 情况二: 当下载到第六个视频时,发现该知识已经学会,收到结束该视频下载,直接进入下一个视频的下载
for i in range(1, 11):
    # 判断如果是第六个视频,手动结束下载
    if i == 6:
        print(f'这个知识已经学会了,视频不要了,下载其他的')
        # 使用continue结束这个视频的下载继续下载下一个
        # continue不会影响循环的执行次数,同时也不会影响else的执行
        # 换句话说 continue不会造成循环的异常终止.
        continue
    print(f'第{i}个视频下载完成...')
else:
    print('视频全部下载完成.')

练习: 循环输出学员信息,学员学号为1-10 ,如果没有重名的学员则输出,”学员均不重名”
情况1:,当输出学员学号为4的时候发现有重名,则提示X号学员重名,结束循环.

03-报数游戏[熟悉]

# 需求:
# 1.一些同学从1开始报数,当需要爆出的数字是7或者该数字是7的倍数时,跳过,不进行报数
# 2.所有学员都参与报数后,结束游戏
# 3.学员全部宝术后,统计所有报数学员的数量,  条件: 班级学员人数为50人

# 分析:
# 1.从1-50进行报数
# 2.如果数字为7或者7的倍数,则该学员不报数
# 3.报数的同学数量需要创建一个变量保存起来,并在报数时,进行自增

# 第一步:从1-50进行报数
# for i in range(1, 51):
#     print(i)
#

# 第二步: 从1-50报数,如果数字是7或者7的倍数,则不打印
# for i in range(1, 51):
#     if i % 7 != 0:
#         print(i)

# 第三步: 从1-50报数,如果数字是7或者7的倍数,则不打印,并且打印一共有多少人报数了
# 创建一个变量保存有多少人报数
count = 0

for i in range(1, 51):
    # 这里是循环体的第一行,一共需要循环多少次,就证明有多少个学员
    if i % 7 != 0:
        # 我们需要在报数的情况下,将conut进行自增,统计报数人数
        count += 1
        print(i)

# 输出报数人数

04-猜数游戏[熟悉]

# 需求:
# 1. 使用random随机生成一个1-100之间的数字
# 2. 循环用键盘输入猜测的数值
# 3. 如果猜测的数据大于答案的数据,要输出"您输入的数字太大了"
# 4. 如果猜测的数据小于答案的数据,要输出"您猜测的数字太小了"
# 5. 如果猜中则退出游戏,并提示您猜对了,如果猜错则重猜

import random

# 获取一个1-100之间的随机数
random_num = random.randint(1, 100)
# 只有才对才能结束游戏,否则一直循环下去

# 如果需要添加数字范围,则需要记录上移此的边界值
range_num_down = 1
range_num_up = 100

while True:
    # 用键盘键入猜测的值 注意数据类型问题
    player_num = int(input('请输入您猜测的数据'))
    # 判断你猜测的值大于目标值还是小于目标值
    if random_num < player_num:
        # 大于则输出  您输入的数字太大了
        # 分析: 如果我猜测50 提示数字太大,则下一次猜测的范围 是 1-50 还是50-100??? 所以需要更换上边界
        range_num_up = player_num
        print(f'您输入的数字太大了,下一次请从{range_num_down}-{range_num_up}进行猜测')
    elif random_num > player_num:
        # 小于则输出  您猜测的数字太小了
        range_num_down = player_num
        print(f'您猜测的数字太小了,下一次请从{range_num_down}-{range_num_up}进行猜测')
    else:
        print('您猜对了,太棒了')
        # 猜中之后结束游戏
        break

05-容器类型介绍[了解]

  1. 容器类型就是可以保存多个数据或变量的数据类型
  2. 容器类型的作用:
    1. 减少变量的定义,例如我们要保存学校所有学院的名称,使用容器类型仅需要定义一个变量名称即可
    2. 容器类型中的元素可以使用for循环依次遍历获取
    3. 容器类型有自己的增删改查的方法,便于使用
  3. 容器类型可以提高开发和存储(内存)效率
  4. 容器类型都有哪呢??
    1. 字符串
    2. 列表
    3. 元组
    4. 字典
    5. 集合

      06-字符串的定义[熟悉]

      ```python

      在python中单引号和双引号效力相同,但是要成对出现不能混用

定义字符串,我们可以使用

一对单引号

str1 = ‘传智’

一对双引号

str2 = “教育”

三对单引号

str3 = ‘’’传智教育’’’

三对双引号

str4 = “””Python+大数据”””

print(type(str1)) # print(type(str2)) # print(type(str3)) # print(type(str4)) #

常用快捷键

复制一行的快捷键 ctrl + d

删除一行快捷键我不知道,但是我一般用剪切的方式删除 ctrl + x

整行数据上下移动 ctrl + shift + 上下

<a name="VPhMc"></a>
# 07-多种引号的应用[了解]
```python
# 1.一对引号和三对引号的区别?
# 一对引号内部没有换行格式,三对引号内部有换行格式
str1 = '窗前明月光,' \
       '疑是地上霜.'  # \代表下一行数据与这一行是同一行内容(换行标识)

print(str1) # 窗前明月光,疑是地上霜.  本质上str1还是一行数据,只不过代码显示时换行了

str2 = """欲渡黄河冰塞川,
将登太行雪满山."""
# 欲渡黄河冰塞川,
# 将登太行雪满山.

# 可以在三对引号内部随意换行,输出时,换行效果依然存在
print(str2)

# 思考: java中没有三队引号,如果python服务将数据传递给java服务,会变成一行么??? 不会
# 三队引号中存放的数据,会将换行效果以\n的形式记录起来,本质上还是普通字符串,只不过\n在书写时是自动添加的


# 2.为什么我们要设置这么多种字符串的定义格式呢?
# 因为我们可以使用多种引号嵌套的方式更加灵活的处理字符串
# 需求: 打印一个I'm a Tom
# print('I'm a Tom') # SyntaxError: invalid syntax 这种方式会报错,因为遇到第二个引号后,字符串就结束了

# 解决方式一: 使用\进行转译, 将'进行转译后,就变成了一个普通字符,没有字符串开始结束符的含义了,可以随意使用
print('I\'m a Tom')

# 解决方式二:引号的嵌套
# 在单引号内部可以嵌套双引号使用, 双引号内部也可以嵌套单引号使用,三对引号也可以参与嵌套,极其灵活
print("I'm a Tom")

# 如果我们使用的数据既包含单引号,又包含双引号,那最外层可以使用三队引号
# 需求:打印 鲁迅说:"I'm a 周树人"
# 使用转译的形式处理
print('鲁迅说:\"I\'m a 周树人\"')

# 使用引号嵌套形式处理
print('''鲁迅说:"I'm a 周树人"''')
# print("""鲁迅说:"I'm a 周树人"""")  # 字符串最后一个字符时双引号,则不能使用三对双引号进行处理

# 练习: 我们要输出  '''鲁迅说:"I'm a 周树人"'''  需要怎么办?
print("""'''鲁迅说:"I'm a 周树人"'''""")

# 如果是其他编程语言需要怎么做呢?  所以python中对字符串的处理极其简单方便,其他语言难以比拟
print('\'\'\'鲁迅说:\"I\'m a 周树人\"\'\'\'')

一对引号和三对引号在内存中的存储方式一致,但是三对引号会将换行效果以\n的形式保存起来

image.png

08-字符串的下标[熟练使用]

  • 正数索引从0开始从左至右依次递增
  • 负数索引从-1开始从右至左依次递减 ```python “”” 字符串的下标: 所谓的下标就是指字符串的元素的索引(编号), 每一个索引(编号)都对应一个唯一的元素 所有的下标均为整数,且连续不可跳跃

    格式:

      字符串数据[索引] 根据索引获取字符串中的指定元素
    

    “””

str1 = ‘itcast’ ‘’’ 正数下标: 字符串: i t c a s t 下标: 0 1 2 3 4 5

结论: 正数下标,从0开始,从左至右依次递增 ‘’’

需求: 获取c

print(str1[2]) # c

需求: 获取t

print(str1[5]) # t

‘’’ 负数下标: 字符串: i t c a s t 下标: -6 -5 -4 -3 -2 -1

结论: 负数下标从-1开始 从右至左依次递减 ‘’’

需求: 获取c

print(str1[-4]) # c

需求: 获取t

print(str1[-1]) # t

思考:

str2 = ‘我爱北京天安门’

1.使用正数下标获取安

print(str2[5]) # 安

2.使用负数下标获取北

print(str2[-5]) # 北

注意:

1.在字符串中,左侧数据的索引值一定小于右侧数据的索引值

2.一般我们都会使用正数索引,当想要获取末尾的数据时才会使用负数索引.

3.在开发中说索引,下标,元素编号,index 都是同一个东西

<a name="ONoLH"></a>
# 09-字符串的切片[熟练使用正数索引正数步长切片]

- 在开发中我们几乎只使用正数步长的切片,索引值我们也几乎只用正数索引
```python
# 切片:按照规则获取字符串中的一部分元素的方法叫做切片
# 切片的格式: [起始位置索引, 终止位置索引, 步长]
# 起始位置索引: 切片的开始位置的下标[包含]
# 终止位置索引: 切片结束位置的下标[不包含]
# 步长: 获取数据的间隔(后一个元素的索引值- 前一个元素的索引值)


# 创建字符串
s1 = 'abcdefg'

'''
字符串:   a    b    c    d    e    f    g 
正数下标: 0    1    2    3    4    5    6
负数下标:-7   -6   -5   -4   -3   -2   -1
'''

# 步长为正数 从左至右按照规则取值
# 需求1: 获取bcd
# 分析:从下标为1的元素开始切片,切刀下标为4的元素(不包含), 步长为1
# 正数索引
print(s1[1:4:1])  # bcd
# 负数索引
print(s1[-6:-3:1])  # bcd

# 需求2: ceg
# 分析: 从下标为2的元素开始切片,切刀下标为7的元素(不包含),步长为2
# 正数索引
print(s1[2:7:2])  # ceg
# 负数索引 下标7不存在,所以没有负数索引
print(s1[-5:7:2])  # ceg

# 思考:
str2 = '我爱北京天安门'

"""
我   爱   北   京   天   安   门
0    1    2    3    4    5    6
-7  -6   -5   -4   -3   -2   -1
"""

# 需求: 获取"爱京安" 使用正数索引和负数索引两种方式完成
print(str2[1:6:2])  # 正数
print(str2[-6:-1:2])  # 负数

# 负数步长: 从右至左依次取值
# 创建字符串
s1 = 'abcdefg'

'''
字符串:   a    b    c    d    e    f    g 
正数下标: 0    1    2    3    4    5    6
负数下标:-7   -6   -5   -4   -3   -2   -1
'''

# 需求1:获取dcb 此时起始位置是下标为3的位置(包含), 终止位置是下标为1的位置,每一个数据和前一个数据下标的差值为-1
print(s1[3:0:-1])  # dcb

# 需求2: 获取fdb 此时,起始位置下标为5(包含), 终止位置下标为1,每一个数据和前一个数据的下标差值为-2
print(s1[5:0:-2])  # fdb

# 思考如果取值范围是 0:5  步长为-2 结果是什么???
print(s1[0:5:-2])  # 输出内容为空字符串

# IndexError: string index out of range
# 如果获取元素时,索引不存在,则报错
# print(s1[7])

# 结论:
# 1.切片中如果步长为正,则起始位置小于终止位置,如果步长为负,则起始位置大于终止位置,否则就会获得一个空字符串
# 2.切片时获取的数据不存在,则返回空字符串,不会报错,但是获取元素时填写的索引值不存在会报错
# 3.切片不会影响源数据,而是产生了一个新的字符串
print(s1)  # abcdefg
# 4.在开发中经常使用的两种切片 (涉及后续知识)
# 复制容器
s2 = s1[:]
# 使用切片反转字符串
print(s1[::-1])

Day04 循环语句 字符串 - 图5

10-字符串切片的省略模式[了解]

# 当步长为正数的时候
# 可以省略起始位置,省略后默认起始位置是从字符串开始的位置进行切片
# 可以省略终止位置,省略后默认切片到字符串结束的位置
# 步长可以省略,省略后默认步长为1,省略步长,可以同时省略步长前的:

str1 = 'abcdefg'
# 需求1: 获取abc
print(str1[0:3:1])  # abc
# 可以省略开始位置
print(str1[:3:1])  # abc
# 可以省略步长
print(str1[:3:])  # abc
# 省略步长时可以同时省略步长前的:
print(str1[:3])  # abc

# 需求2:获取defg
print(str1[3:7:1])  # defg
# 省略结束位置
print(str1[3:])  # defg

# 步长为负数的时候(不能省略步长)
# 可以省略开始位置,省略后,默认从字符串结束位置开始向左进行切片
# 可以省略结束位置,省略后,默认切片到字符串开始位置
str1 = 'abcdefg'
# 需求1: 获取cba
print(str1[2:-8:-1])  # cba
# 省略结束位置
print(str1[2::-1])  # cba

# 需求2: 获取gfed
print(str1[6:2:-1])  # gfed
# 省略开始位置
print(str1[:2:-1])  # gfed


# 注意:
# 1.省略方式中,正数方式重点记忆,负数了解即可
# 2.如果想要复制一个字符串可以使用str[:]
# 3.如果想要反转一个字符串可以使用str[::-1]

11-字符串中的find和index方法[熟练使用]

# find()
# find查询字符串中指定子字符串从左至右第一次出现的正数索引的值,如果子字符串在目标字符串中不存在,返回-1
# 格式: 字符串.find(sub(子字符串), start(起始位置), end(结束位置))

str1 = 'hello python and BigData!!!!!!!!'
#           4     10
# 需求1: 查询str1字符串中o所在的索引位置
# 在字符串中一共有两个ofind会获取哪一个呢?是从左只有第一次出现的o的索引值
# 如果不填写起始位置,则默认从字符串开始进行查找,如果不填写终止位置,则默认查找到字符串结束
print(str1.find('o'))  # 4

# 需求2:查询str1字符串中o所在的位置,不获取第一个o,第一个o的位置为4
# 分析: 如果我们获取o的索引,需要从左至右获取,那我们就需要控制起始位置跳过第一个o
print(str1.find('o', 5))  # 10 结束位置可以省略,默认查询到字符串结束.
print(str1.find('o', 5, 10))  # -1 查询范围是一个左闭右开的区间.

# 当find查询的子字符串在目标字符串中不存在时 就会返回 -1

# 需求3: 查询str1字符串中python所在的位置
print(str1.find('python'))  # 6 如果子字符串有多个字符则返回查找内容的第一个字符所对应的元素下标

print('-----------------------')

# index()
# index查询字符串中指定子字符串从左至右第一次出现的正数索引的值,如果子字符串在目标字符串中不存在,则报错
# 格式: 字符串.index(sub(子字符串), start(起始位置), end(结束位置))

# 需求1: 查询str1字符串中o所在的索引位置
print(str1.index('o'))  # 4

# 需求2: 查询str1字符串中o所在的位置,不获取第一个o,第一个o的位置为4
print(str1.index('o', 5))  # 10

# ValueError: substring not found
# 当index中查询的子字符串不存在时,报错
# print(str1.index('o', 5, 10))

# 需求3:查询str1字符串中python所在的位置
print(str1.index('python'))  # 6


# 注意: find由于不会报错,所以在使用时,比index更加安全,但是要注意-1索引也是有值的 要进行判断
# 举例: 获取str1中z出现的索引位置,并通过索引位置获取z的值.
# index1 = str1.find('z') # 没有z这个子字符串, 最终返回-1
# print(str1[index1]) # !  字符串中索引值为-1的数据为!

# 在开发中这一般需要判断
index = str1.find('z')
if index != -1:
    print(str1[index])
else:
    print('该字符不存在')

思维拓展:

# 有一个字符串
str1 = 'hello python and BigData!!!!!!!!'
# 查询该字符串中所有a出现的位置并打印

# 提示: 可以使用循环 用变量记录每一次查询的初始位置

# 方法1:
index = str1.find('a')
print(index)
index = str1.find('a', index + 1)
print(index)
index = str1.find('a', index + 1)
print(index)

# 问题1: 你怎么知道就有3个a 呢?
# 问题2: 重复做了三次相似的事情,是否可以使用循环呢?

# 方法2:
# index初始值为-1.则第一次进入查询时开始位置为index + 1 = 0
index = -1
while True:
    # 本次查询的数据,需要跳过之前查询的数据位置,所以需要在上一次查询到的数据位置基础上+1
    index = str1.find('a', index + 1)

    if index != -1:
        print(index)
    else:
        print('查询结束')
        break

Day04 循环语句 字符串 - 图6

作业

03_循环作业.md
03_循环答案.md
04_字符串作业.md
04_字符串答案.md

作业提交

点击查看【jinshuju】

文件链接

百度云盘: 链接:https://pan.baidu.com/s/13TqhouBQ8h1lP2VFtQHgMw 提取码:lh3d
阿里云盘:「python+大数据79期基础」等文件 https://www.aliyundrive.com/s/G6iPqGFQgfJ