循环结构之for循环

实现循环结构还可以用关键字for

for关键字

我们来看这一段代码:

emotions = ['smile', 'laugh', 'cry', 'angry']
for emo in emotions:
print('我现在的心情是:', emo)
"""运行结果:
我现在的心情是: smile
我现在的心情是: laugh
我现在的心情是: cry
我现在的心情是: angry
"""

for循环可以遍历一个含多元素的数据类型,如字符串、列表 、元组、字典、集合等

上述程序就是将列表中的每个元素逐个取出,并且打印了出来。

那么for循环具体怎么呢,适用什么场景?

用法:

for 变量名 in 能遍历的数据类型:
子代码块
  • 与while不同,for循环后面跟的不是条件,它的循环体正常结束的条件是数据值被遍历完了
  • for 后面的变量会绑定本次遍历的元素值,这个变量在循环体中可取(不可改)
练习
 l1 = [11,2,3,2,2,1,2,1,2,3,2,3,2,3,4,3,2,3,2,2,2,2,3,2]
# 统计列表中有多少个数字2 count = 0
for i in l1:
if i == 2:
count += 1
print('列表中有%s个2' % count)

for循环体的break和continue

for同样作为循环结构的关键字,与while自然也有一些共性

  • for循环体中碰到break关键字,会立即终止循环,执行for后续的同级代码

    l1 = [1, 2, 3, 4]
    for i in l1:
    if i == 3:
    break
    print(i)
    # 输出结果
    1
    2
  • for循环体中碰到continue关键字,会立即停止本次循环,执行下一次循环

    l1 = [1, 2, 3, 4]
    for i in l1:
    if i == 3:
    continue
    print(i)
    # 输出结果
    1
    2
    4

for配合else

for循环如果是正常结束循环(没有被break打断的而结束了循环)

则会执行else子代码块的内容:

l1 = [1, 2, 3, 4]
for i in l1:
if i == 3:
continue
print(i)
else:
print('正常结束就能看到我喽')
# 输出结果
1
2
4
正常结束就能看到我喽

range

range()常常能和for循环搭配起来,因为它可以生成一个可以遍历的数据类型。

我们可以看一看range和for循环搭配的几种用法

  1. range(一个数字)

    for i in range(10):
    print(i, end=' ')
    # 0 1 2 3 4 5 6 7 8 9
    for i in [0, 1, 2, 3 ,4 ,5 ,6, 7, 8, 9]:
    print(i, end=' ')
    # 0 1 2 3 4 5 6 7 8 9

    可以看见range(10)相当于生成了一个从0开始到9的一个列表。(是括号中的数字的前一个数)

  2. range(两个数字)

    for i in range(5, 10):
    print(i, end=' ')
    # 5 6 7 8 9
    for i in [5 ,6, 7, 8, 9]:
    print(i, end=' ')

    从效果来看,range(5, 10)相当于从5到9的一个列表。(左边包含,右边不包含

  3. range(三个数字)

    for i in range(1, 10, 2):
    print(i, end=' ')
    # 1 3 5 7 9
    for i in [1 ,3, 5, 7, 9]:
    print(i, end=' ')
    # 1 3 5 7 9

    range(1, 10, 2)表示从1开始,到10之前,以等差为2生成一个列表。(最后一个数字表示步长

所以我们可以知道range的括号内含的几个参数代表什么意思了,也简单掌握了range生成数字列表的功能。

练习
  1. 用循环计算数字1-100的和:
# 参考
total = 0
for i in range(1, 101):
total += i
print('1-100的总和为:', total)
  1. 编写代码自动生成所有页网址(注意总共多少页)

    https://movie.douban.com/top250
# 参考
douban_url = 'https://movie.douban.com/top250?start=%s&filter='
for i in range(0, 251, 25):
print(douban_url % i)

for循环嵌套

循环嵌套,就是拿循环中套循环。

# 除了利用range()生成数字列表,还可以range决定循环次数。
for i in range(4): # 外循环运行四次
for j in range(5): # 内循环运行五次
print('*', end='')
print()
'''运行结果:
*****
*****
*****
*****
'''
内循环循环五次产生一行五个*号
外循环将循环五次的内循环循环了四次,产生了4行

while配合else

while配合else使用,则在正常结束循环体代码时会触发else的代码块。

# 猜数字
i = 0
num = '17'
while i < 3:
# 每次循环要求猜数字
guess_num = input('猜一下数字')
# 猜数字猜对了,通过break退出循环
if num == guess_num:
print('猜对了,你还是懂我')
break
# 三次循环都没有猜对,正常结束循环体
else:
print('猜了三次还猜不出来,不心有灵犀')

while循环补充

死循环

不仅无法自动结束,在持续期间还会占用CPU的大量资源。

是十分危险的无限循环行为。

说到危险就要提到不久前,b站因为几行代码,导致“0”溢事件,不断的循环运算,导致b站的服务器被占满,直接崩了。

什么样的代码算死循环呢?

count = 2
while True:
count **= 2
# 无限幂运算,想想就刺激,不要复制到自己的电脑尝试。

while循环嵌套

while循环嵌套,是大循环嵌套小循环非常6的一个构造。

i = 1
while i < 3:
print('外层循环%s' % i)
j = 1
while j < 3:
print('内层循环%s' % j)
j += 1
i += 1
# 运行结果:
'''
外层循环1
内层循环1
内层循环2
外层循环2
内层循环1
内层循环2
'''

每执行一次外层循环体,都会完整的走完一次内层循环。

因为内层while是外层while的循环体。

了解:while嵌套之break生效
# 不断询问账户,直到输入正确进入内层循环
while True:
account = input('输入账户')
if account == 'leethon':
# 不断输入数字,当数字输入是3时,退出程序
while True:
num = input('输入数字')
if num == '3':
break
else:
print('账户错了,重新输入')

以上的程序中,当我们猜对数字后,会发现程序要求我们继续输入账户,说明内层的break让程序退出了内层循环,但却无法跳出外层循环。

所以我们可以得出一个结论:break仅打断它所在的最内层循环

那么我们想要跳出外层循环应该怎么做呢?

有两个方案:

  • 在外层的while循环体也加一个break

    • 如上,当内循环结束后就立马跟一个break结束外循环
    • 新加的break放在这里与内while同级,同属于外循环体,所以碰到后会结束外循环
    • 这个break在if分支下,即当账户正确时且内部数字也猜对了才会结束外循环
  • 使用全局标记退出

    # 定义一个全局变量
    flag = True
    # 一开始flag一直为真
    while flag:
    account = input('输入账户')
    if account == 'leethon':
    # 不断输入数字,当数字输入是3时,退出程序
    while flag:
    num = input('输入数字')
    if num == '3':
    # 只有当这里才可以修改flag为假
    flag = False
    else:
    print('账户错了,重新输入')
    1. 当猜对数字后,flag修改为False并不是立即结束循环,只有break才能打断循环
    2. flag修改后,此次循环正常结束,进入下一次while条件判断
    3. 内层while条件判断发现flag为假,不必进行下一次循环了
    4. 外层while条件判断发现flag为假,不必进行下一次循环了

python流程控制下-for、while循环补充的更多相关文章

  1. Python 流程控制-分支结构详解

    目录 Python 流程控制--分支结构 1.结构分类 顺序结构 分支结构 循环结构 2.分支结构详解 分支结构 定义格式: if 单支结构 if 双分支结构 if 多分支结构 Python 流程控制 ...

  2. Laravel 5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句

    Laravel5.6 视图用Blade语法传递变量和流程控制if 语句和循环语句 Laravel 的 View 部分是内置了两套输出系统:直接输出和使用 Blade 引擎“编译”后输出,默认情况下它们 ...

  3. Python(四)之Python流程控制(if、while、for)

    Python流程控制 if测试: if 条件测试表达式: 组合条件测试: x and y:与运算 x or y:或运算 not x:非运算 while: break:跳出最内层的循环 continue ...

  4. Java基础-程序流程控制第二弹(循环结构)

    Java基础-程序流程控制第二弹(循环结构) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 流程控制有三种基本结构:顺序结构,选择结构和循环结构.一个脚本就是顺序结构执行的,选择结 ...

  5. python 流程控制(条件语句)

    1,python流程控制单条件基本语句 2,python流程流程多条件控制语句 3,三元运算 1,python流程控制单条件基本语句 if 判断条件: 执行语句…… else: 执行语句…… 判断条件 ...

  6. Python流程控制if判断以及whlie循环

    一.基本运算符补充 1. 算术运算          print(10 / 3)          print(10 // 3)          print(10 ** 2) 2. 赋值运算    ...

  7. python流程控制和循环

    变量的命名:可以由数字字母下换线组成 ,不能以数字开头,可以使用中文但是不推荐使用中文,不推荐前面使用_ __,不能使用系统的关键字,变量名严格区分大小写 逻辑运算优先级 or<and<n ...

  8. python流程控制for循环

    流程控制 for循环 #首先我们用一例子看下用while循环取出列表中值的方法 l=['a','b','c'] i=0 while i<len(l): print(l[i]) i+=1 #whi ...

  9. Python流程控制与while 循环(day01)

    一:流程控制 假如把写程序比做走路,那我们到现在为止,一直走的都是直路,还没遇到过分叉口,想象现实中,你遇到了分叉口,然后你决定往哪拐必然是有所动机的.你要判断哪条叉路是你真正要走的路,如果我们想让 ...

随机推荐

  1. vscode无法调试python2.7版本

    概述 好久没有用python2.7版本了,最近有个老的脚本要优化,但是发现vscode无法对脚本调试,特此记录下解决方法. 本地安装有python2和python3,开发过程中,vscode可以随时调 ...

  2. AI全流程开发难题破解之钥

    摘要:通过对ModelArts.盘古大模型.ModelBox产品技术的解读,帮助开发者更好的了解AI开发生产线. 本文分享自华为云社区<[大厂内参]第16期:华为云AI开发生产线,破解AI全流程 ...

  3. css基础03

    就近原则执行粉色.而不是全覆盖,只有样式冲突的地方才会覆盖. 会执行粉色和12px.后来者居上 高度宽度内外边距这些不会继承. 子元素会继承行高, 1.5是行高是字体大小的1.5倍的意思. 有了!im ...

  4. react实战系列 —— react 的第一个组件

    react 的第一个组件 写了 react 有一个半月,现在又有半个月没写了,感觉对其仍旧比较陌生. 本文分两部分,首先聊一下 react 的相关概念,然后不使用任何语法糖(包括 jsx)或可能隐藏底 ...

  5. Vue 下拉框值变动事件传多个参数

    在使用 Vue 进行开发时,下拉框值变动事件 @change 是很常用的. 其传参一般分为两种方式:默认传参和自定义传参. 默认传参 @change 默认会传选中项标识的参数,在传参处不用定义,在方法 ...

  6. Mybatis介绍、使用IDEA快速入门

    1. Mybatis概念 MyBatis 是一款优秀的持久层框架,用于简化 JDBC 开发 JavaEE三层架构:表现层.业务层.持久层 JDBC 与 MyBatis 对比: MyBatis 本是 A ...

  7. Affinity broken due to vector space exhaustion 问题

    dmesg 中异常打印: kernel: irq 632: Affinity broken due to vector space exhaustion. kernel: irq 633: Affin ...

  8. 用GitHub Actions自动部署Hexo

    什么是 GitHub Actions ? GitHub Actions 是一个 CI/CD(持续集成/持续部署)工具,GitHub 于 2018 年 10 月推出,正式版于 2019 年 11 月正式 ...

  9. HMS Core Discovery第17期回顾|音随我动,秒变音色造型师

    HMS Core Discovery第17期直播<音随我动,秒变音色造型师>,已于8月25日圆满结束,本期直播我们邀请了HMS Core音频编辑服务的产品经理.技术专家以及创新娱乐类应用& ...

  10. CCF NOI Online 2021 提高组 T2 积木小赛 (子序列自动机+后缀自动机,O(n^2))

    题面 Alice 和 Bob 最近热衷于玩一个游戏--积木小赛. Alice 和 Bob 初始时各有 n 块积木从左至右排成一排,每块积木都被标上了一个英文小写字母. Alice 可以从自己的积木中丢 ...