本文将探索:

【探索内容】

在3.2中,我们探索了当某个条件为真则执行相应代码块的if语句,实际上,我们还会遇到一些情况,当某个条件为真,则一直执行某项操作,直到条件为假;等看起来很复杂情况。实际上,计算机擅长处理人类觉着重复枯燥的事情。本文我们将来探索循环,感受一下计算机处理特定重复事情的简洁与优雅。

1.while 循环

计算1+2+3+4+5或许我们会写出:

print(1+2+3+4+5)

但如果想要计算1+2+3+4+...+100的值,将式子完整写出来相当麻烦,而用省略号这种人类看得懂的语言,计算机也无法直接看懂,计算机有它自己的语言规则,可以这样写:

就像上面那样做,并事情就变得简单多了。计算机依次执行1,2行语句,来到第3行时,判断while后面i<=100为真则执行下方代码块的内容(第4,5行内容),而后再回到第3行while位置,判断i<=100是否为真,若为真,则继续执行下方代码块的内容,如此循环操作,直到最后一次i=101,而后再回到第3行while位置,此时i<=100为假,则跳出while循环(不再执行while语句的代码块),来到第6行,输出s的值

while语句非常灵活,可用于在条件为真时反复执行代码块

2.for 循环

对于循环,有时候我们可能想根据需要进行定制。比如,一种这样的需求是为序列(或其他可迭代对象)中每个元素执行代码块。

注:基本上, 可迭代对象是可使用for循环进行遍历的对象。就目前而言,只需将可迭代对象视为序列即可。如果你感兴趣,可以自行搜索可迭代对象和迭代器。

栗子1:

numbers = [0, 1, 2, 3]
for i in numbers: print(i)

执行上述代码,会依次打印列表numbers中的每一个元素:

0
1
2
3

鉴于迭代(也就是遍历)特定范围内的数是一种常见的任务, Python提供了一个创建范围的内置函数range。范围类似于切片。它们包含起始位置(这里为0),但不包含结束位置(这里为4)。

使用range,如果想打印一定范围内的数,会非常方便,如打印数1~ 100:

for i in range(101):print(i)

注:只要能够使用for循环,就不要使用while循环。

栗子2:

t = ("apple","banana","pear")
for i in t:print(i)

执行上述代码,会依次打印元组t中的每一个元素:

apple
banana
pear

栗子3:完成挑战1.

栗子4:要遍历字典的所有关键字,可像遍历序列那样使用普通的for语句。

d = {'x': 1, 'y': 2, 'z': 3}
for key in d:print(key)

若想遍历字典的所有值,使用d[key]即可:

d = {'x': 1, 'y': 2, 'z': 3}
for key in d:print(d[key])

注意:for 后面的变量名可自行选取,如想遍历字典的值写成下面代码和上一个代码并无本质不同。

d = {'x': 1, 'y': 2, 'z': 3}
for i in d:print(d[i])

注:字典元素的排列顺序是不确定的。换而言之,迭代字典的键或值时,一定会处理所有的键或值,但不知道处理的顺序。如果顺序很重要,可将键或值存储在一个列表中并对列表排序,再进行迭代。

3. 内置函数zip

Python提供了多个可帮助迭代序列(或其他可迭代对象)的函数,模块itertools中,还有一些内置函数使用起来也很方便。

有时候,可能想同时迭代两个序列。假设有下面两个列表(水果和价格),要打印水果和对应的价格,可以像下面这样做::

f = ['apple', 'banana', 'pear', 'mango']
p = [12, 6, 5, 9]
for i in range(len(f)):print(f[i], '$', p[i])

运行结果为:

apple $ 12
banana $ 6
pear $ 5
mango $ 9

一个很有用的并行迭代工具是内置函数zip,它将两个序列“缝合”起来,并返回一个由元组组成的序列。返回值是一个适合迭代的对象,要查看其内容,可使用list将其转换为列表。

f = ['apple', 'banana', 'pear', 'mango']
p = [12, 6, 5, 9]
list(zip(f, p))

运行结果为:

[('apple', 12), ('banana', 6), ('pear', 5), ('mango', 9)]

"缝合"后,可在循环将元组解包:

f = ['apple', 'banana', 'pear', 'mango']
p = [12, 6, 5, 9]
for i, j in zip(f, p):print(i, '$', j)

注:函数zip可用于“缝合”任意数量的序列。需要指出的是,当序列的长度不同时,函数zip将在最短的序列用完后停止“缝合”。

4.跳出循环

有些情况下,需要中断循环、开始新迭代(进入“下一轮”代码块执行流程)或直接结束循环。

4.1 break:结束(跳出)循环。

在60以内的整数中,从1开始加,加到某个数字,和为120,找到这个值。找到这个值以后,无需再迭代,因此直接跳出循环。

sum = 0
for i in range(1,60):sum = sum + iif sum == 120:print(i)break

4.2 continue:结束当前迭代,并跳到下一次迭代开头。

continue意味着跳过循环体中余下的语句,但不结束循环,开启下一次循环。

若果只打印10以内的奇数,可以用continue语句跳过某些循环:

for i in range(11):if i % 2 == 0: # 如果i是偶数,执行continue语句continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行print(i)

5.循环中的 else 子句

通常,在循环中使用break是“发现”了什么或“出现”了什么情况。要在循环提前结束时采取某种措施很容易,但有时候可能想在循环正常结束时才采取某种措施。如何判断循环是提前结束还是正常结束的呢?一种简单的办法是在循环中添加一条else子句,它仅在没有调用break时才执行。继续前面讨论break时的示例。

将题目稍稍修改,在60以内的整数中,从1开始加,加到某个数字,和为1200,看看能否到这个值?

sum = 0
for i in range(1,60):sum = sum + iif sum == 1200:print(i)break
else:print("Didn't find it!")

注:无论是在for循环还是while循环中,都可使用continue、 break和else子句。

刚兴趣的小伙伴可以再瞅瞅:python易错知识点:break 及break语句

【挑战】

1.使用for循环依次打印出字符串hello,world中的每一个字符。

存储过程循环遍历一个月的每一天的函数_3.3 循环相关推荐

  1. 存储过程循环遍历一个月的每一天的函数_JavaScript 循环:如何处理 async/await

    同步循环 很久以前我写的循环是这样的: 后来 JavaScript 提供了很多新的特性,现在我们会更倾向于用下面这种写法: 在开发过程可能会有这么一种需求,我们需要在循环中异步处理 item,那么可以 ...

  2. go for 循环遍历数组并排序_10. Go语言流程控制:for 循环

    本文原文:http://golang.iswbm.com Github:http://github.com/iswbm/GolangCodingTime Go里的流程控制方法还是挺丰富,整理了下有如下 ...

  3. Java for循环遍历一个list_for循环遍历list集合组拼成字符串StringBuilder,及处理最后一个逗号...

    方法一:拼接过程中自动处理逗号     public static void main(String[] args) { StringBuilder str=new StringBuilder(); ...

  4. python循环遍历把表写入csv_求教python3.5如何把字典循环写入csv?

    初学爬虫,希望把爬到的每条信息写入一个字典,然后循环写入csv文件.但是总是报错显示ValueError: dict contains fields not in fieldnames: 'p',求指 ...

  5. 在html循环字母,怎么样能遍历一个字符串

    用java怎样实现遍历一个字符串的每一个字母 Java遍历一个字符串的每一个字母 String str = "asdfghjkl"; 方法一 String str = " ...

  6. 处理业务代码中循环遍历出现的性能问题

    在开发中很多场景下我们都会用到foreach循环遍历一个list,并在内部通过sql再去查询对应的数据,代码如下 public void test(){// 获取知识点关联数据List<Know ...

  7. Objective-C 高性能的循环遍历 forin - NSEnumerator - 枚举 优化

    Cocoa编程的一个通常的任务是要去循环遍历一个对象的集合  (例如,一个 NSArray, NSSet 或者是 NSDictionary). 这个看似简单的问题有广泛数量的解决方案,它们中的许多不乏 ...

  8. js 循环拆词_javascript forEach通用循环遍历方法

    循环遍历一个元素是开发中最常见的需求之一,那么让我们来看一个由框架BASE2和Jquery的结合版本吧. 上一次的错误太多,排版也出现了问题,重写了一遍,希望大家支持. 循环遍历一个元素是开发中最常见 ...

  9. 统计一个整数的所有因子的个数_【题解循环嵌套】1095:数1的个数

    1095:数1的个数时间限制: 1000 ms    内存限制: 65536 KB [题目描述] 给定一个十进制正整数n(1≤n≤10000),写下从1到n的所有整数,然后数一下其中出现的数字&quo ...

最新文章

  1. 机器学习基石4-在何时才能使用机器学习(4)
  2. React+Webpack+Eslint+Babel构建React脚手架
  3. 中华人民共和国公安部令 第 82 号- 互联网安全保护技术措施规定
  4. mysql到es的交叉验证
  5. java 静态成员 实例成员变量_java对象实例化时的顺序(静态成员变量、静态代码块、成员变量、方法块加载、构造函数加载)...
  6. Firefox Focus 9.0 将新增广告拦截插件
  7. java列名无效_Java:列名无效
  8. Nginx反向代理处理跨域问题
  9. python中换页是干嘛的_python什么是转页符
  10. 如何彻底对chrome降级
  11. springboot整合postgresql
  12. mysql强行关闭回滚中的进程_mysql查询正在执行的进程
  13. IDEA Maven下载依赖时报错: ERROR - #org.jetbrains.idea.maven - Cannot reconnect.
  14. java servlet验证码_Servlet 实现验证码
  15. 【青少年编程】【三级】接苹果
  16. 一个免费全格式MP3音乐播放器的工具
  17. 这个人就是吴恩达(Andrew Ng),百度新任首席科学家
  18. 如何让孩子保持兴趣,怎么培养孩子读书的兴趣
  19. 曼尼托巴大学计算机科学硕士,曼尼托巴大学电气和计算机工程硕士解析
  20. Go语言如何实现删除Winmail邮箱系统中收件箱的所有邮件

热门文章

  1. matlab 编程——一些细节、常犯错误的汇总
  2. Python 基础——range() 与 np.arange()
  3. mysql update 并发 慢_详解Mysql的锁机制
  4. react ssr php,一文吃透 React SSR 服务端渲染和同构原理
  5. python必背100源代码-学会这个Python库,至少能减少100行代码
  6. python 菜鸟-Python3 模块
  7. python手机版下载-QPython下载
  8. python入门经典代码-【python】编程语言入门经典100例--12
  9. 谁给讲讲语音识别中的CTC方法的基本原理?
  10. java虚拟机结构图解(堆栈方法区)