沧海桑田,物换星移。
昼夜旋转,寒暑更替。
这一切的一切都是轮回。
循环
一个程序从头跑到尾直勾勾的跑完了,中间如果没有弯弯绕绕的也就少了那么点智能的味道。
更别提把简单重复的工作交给电脑去做了。
因为这里有一个重点词是“重复”。
举个例子,我们来做一道简单的加法:1 + 2 + 3 + 4 + …… +999 + 1000 = ?
有一些机智的同学能快速的回答出来:“这是等差数列!首项加末项乘以项数除以二!”
恭喜这些同学,学会了一种叫做“算法”的学问!
可是这次我并不想讨论算法,我就是来找茬的,我气焰嚣张的严要求大家必须算出每次相加时的结果!
如果是不会编程的同学看到这种题目,一定会十分痛苦。
不过交给程序以后,我们就可以高枕无忧了!
下面说一下第一种循环:for循环。
for循环
先上代码!
a = 0
for i in range(10001):
a += i
print(a)
这一坨代码的输出结果就是0, 1, 3, 6, 10, 15……49995000, 50005000 。也就是上面题目的答案!
我们来解读一下代码!这里使用注释来逐行说明,下方代码中“#”后面的所有东西都是注释,它们会被解释器忽略掉,不管怎么写都不会影响程序的运行!
a = 0 # 这里设置一个变量,用来存放相加的一个结果。因为等号右边的0没有引号包裹,所以它是一个数字,也就是int类型
for i in range(10001): # range()是python自带的一个方法,它可以生成一个可迭代对象,然后我们用i这个变量来迭代它
a += i # “+=”的作用等同于a = a + i,每次遍历的时候,都会将i的值加到a中
print(a) # 将每次的结果打印出来
如果不太容易理解,我们再来写一个简单一点的。
s = "123456"
for i in s:
print("当前数字:", i)
上面代码运行结果为:
>>> s = "123456"
>>> for i in s:
... print("当前数字:", i)
...
当前数字: 1
当前数字: 2
当前数字: 3
当前数字: 4
当前数字: 5
当前数字: 6
我们可以看到,程序把字符串“123456”中的每一个元素逐个打印出来了!这个过程我们称为遍历。
等等!上面不是说迭代吗,为啥这里变成遍历了?
其实在上述情况中用遍历或是迭代都可以,其间细微的差别有兴趣的同学可以自己搜索一下,这里不做展开了。
现在看到的是这一个for循环里,我们的“i”从“s”中逐个拿到每一个元素,并保存在自己身体里,等拿到下一个元素时,再直接替换掉。
上图就是for循环的流程图。
我们再回到最开始的那个问题。range()方法就是会生成一个可迭代对象,默认从0开始,到括号中指定的数字结束。当然了,它也是左闭右开的,所以我们给它指定了10001作为结束位置。
结合现在对for循环的理解,我们是不是已经能自己读懂代码了呢?
如果没有问题,那就恭喜你!学会一个新技能的前提就是读懂它!你已经完成了第一步!
while循环
for循环我们通常会在知道遍历对象长短的情况下使用,如果我们不知道遍历对象的长短,不知道该在哪里停下来,或是我们压根就不想让它停下来呢?
这时就需要用到while循环了!
再举个例子:希望每隔1秒就按顺序打印一次数字,打印5次后就跳出循环。代码如下:
import time # python中一个时间相关的标准库,后面会详细讲的
c = 0 # 定义一个int类型的计数器
while c < 5: # 如果while后面的条件成立(True)则进入本次循环
c += 1 # 进入循环后计数器+1,关于+=是啥意思,在上面有说明哦
print(c) # 打印当前数字
time.sleep(1) # 等待1秒后继续
输出结果:
>>> import time
>>>
>>> c = 0
>>> while c < 5:
... c += 1
... print(c)
... time.sleep(1)
...
1
2
3
4
5
与预期一样!
这个似乎也没有什么难点!我们只需要注意一件事,只要while后面写的条件为真,循环就会一直持续下去,也被称为死循环!所以我们在以后使用while循环的时候一定要小心谨慎,不要写过于复杂的条件,也一定要预留可以跳出循环的出口!
最后再说一件事情,这一节中我们的代码并不像前两节中顺序执行的。所以就出现了一个代码块的概念。我们python通过“缩进”来区分代码块。缩进是指本行代码开头位置的空格,我们通常以4个空格作为一个缩进。相同缩进的代码属于一个代码块。关于这方面的问题我会在后面详细说明!
最最后留下两个问题。
- 在上面的while循环中,如果将
c += 1
与prin(c)
两行代码位置互换,我们的输出结果会有什么不同? - 如何在python代码中直接跳出循环?