循环结构之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. Mybatis源码解读-SpringBoot中配置加载和Mapper的生成

    本文mybatis-spring-boot探讨在springboot工程中mybatis相关对象的注册与加载. 建议先了解mybatis在spring中的使用和springboot自动装载机制,再看此 ...

  2. 反射概述和反射获取字节码Class对象的三种方式

    反射:框架设计的灵魂 框架:半成品软件.可以在框架的基础上进行软件开发,简化变法 反射:将类的各个组成部分封装为其他对象,这就是反射机制 好处: 1.可以在程序运行的过程中操作这些对象. 2.可以解耦 ...

  3. Object类的toString方法和equals方法

    Object类 概述 java.long.Object 类是java语言中的根类,即所有类的父类.它中描述的所有方法子类都可以使用.在对象实例化的时候,最终的父类就是Object 类Object是类层 ...

  4. 基于阿里云直播实现视频推流(ffmpeg)/拉流(Django2.0)以及在线视频直播播放(支持http/https)功能

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_146 由于5g网络的光速推广,视频业务又被推上了风口浪尖,在2019年初我们还在谈论照片,短视频等关键字,而进入2020年,我们津 ...

  5. 【原创】医鹿APP九价HPV数据抓包分析

    本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! 医鹿APP九价HPV数据抓包分析 操作环 ...

  6. 聊聊Spring事务控制策略以及@Transactional失效问题避坑

    大家好,又见面了. 在大部分涉及到数据库操作的项目里面,事务控制.事务处理都是一个无法回避的问题.比如,需要对SQL执行过程进行事务的控制与处理的时候,其整体的处理流程会是如下的示意: 首先是要开启事 ...

  7. 推荐软件(一):Motrix——磁力下载器

    个人觉得迅雷这样的下载器广告又多,启动速度又慢,又占用内存和存储,非常地不好用.有时候下载速度也不是你自己网速的最大值,而且有一些资源也会因为版权问题阻止你下载. Motrix 界面非常简洁:下载速度 ...

  8. Python小白自学笔记:英语不好,变量怎么命名

    变量其实很简单,不过在使用过程中会遇到一些棘手的问题. 比如一个变量我之前已经用过了,现在我要定义一个类似的变量,该怎么办? 还有,很多小伙伴其实知道变量应该遵守什么规范,应该代表什么数据,但是大学英 ...

  9. 使用puppeteer生成pdf与截图

    之前写过一篇 vue cli2 使用 wkhtmltopdf 踩坑指南,由于wkhtmltopdf对vue的支持并不友好,而且不支持css3,经过调研最终选择puppeteer,坑少,比较靠谱. 一. ...

  10. Java基础——02

    今日学习 Java API Scanner package cn.lsl.day03.demo01; //导包 import java.util.Scanner; public class demo0 ...