在python中,循环结构有for循环和while循环两种。
1.while循环
while循环结构格式:
while 条件表达式:
条件执行体
当条件表达式判断为真时,就执行条件执行体中的内容。
如我们写 while i,此时即当i不等于0时,循环继续,当i为0时,循环终止。
实例1:求前n项和
sum = 0
a = int(input("a="))
b = 0
while b <= a:
sum += b
b += 1
print("和为", sum)
当我们输入10时,输出结果为:
55
我们来解析该段代码。首先定义三个变量sum、a、b,while循环的结构是:当b 小于等于 a时,循环运行,而执行体中,sum += b即在sum中加入此次b的值,再对b执行+1操作,如此循环下去,直到某次b > a时,循环结束,输出结果。
实例2:求前n项偶数和
while b <= a:
sum += b
b += 2
print("和为", sum)
此外,while循环可以与else结构结合,形成结构:
while 条件表达式:
条件执行体1
else:
条件执行体2
else在此处的意义为,当while完整执行且没有出现问题时,执行else里面的代码。如我们借此改造我们实例1的代码:
sum = 0
a = int(input("a="))
b = 0
while b <= a:
sum += b
b += 1
else:
print("和为", sum)
也就是说,当前代码如果sum正常相加完且while没有抛出错误,则执行else中的print代码。但若如果while中出现了错误或出现中断循环的情况(可见后续break和continue介绍),则此时不会执行else中的代码。
2.for循环
学习for循环结构之前,我们先得了解与for循环搭配最多的range函数:
range函数用于生成一个整数序列(的迭代器)。其格式为:range(start[, end[, step]])。
当range中只有start时,此时意义为生成一个[0, start)的整数序列,步长为1(前闭后开),如range(5) 即相当于 [0, 1, 2, 3, 4]。
当range既有start也有end时,此时意义为生成一个[start, end)的整数序列,步长为1,如range(5, 10) 即相当于 [5, 6, 7, 8, 9]。
当start、end和step都存在时,此时意义为生成一个步长为step,在[start, end)范围内的整型序列,如range(8, 18, 2) 即相当于 [8, 10, 12, 14, 16]。
(步长可以看作是两数之间相差的大小)
当然,range生成的整型序列不能直接当做列表或元组等的使用,而是需要使用对应的类型函数进行类型转换,如list(range(5))、tuple(range(1, 9, 3))等。
for与关键字in相结合使用,其结构为:
for 自定义变量 in 可迭代对象:
循环体
(若循环体内不需要访问自定义变量时,可以将自定义变量用下划线代替)
可迭代对象在前期可能较难理解,可以理解为如列表、字符串、元组、集合等元素可以挨个访问的对象。
实例1:
for i in range(10):
print(i, end=", ")
此时的输出结果为:
0, 1, 2, 3, 4, 5, 6, 7, 8, 9
因为range相当于生成了[0, 10)的整数序列,for ... in 对该序列的元素挨个访问。
实例2:
a = int(input("a="))
for _ in range(a):
print("run")
当输入10时,可以发现此时run输出了10次。
实例3:求前n位偶数和
n = int(input("n="))
sum = 0
for i in range(0, n + 1, 2):
sum += i
print(i)
通过对步长的编写,而减少是对其自身的+2。此处要写成n+1是因为end处是开区间。
实例4:求水仙花数
水仙花数是指自身=个位三次方+十位三次方+...,如153,1 ** 3 + 5 ** 3 + 3 ** 3 = 3 + 125 + 27 = 153,所以153是水仙花数。
for ia in range(100, 1000):
ib = ic = id = ia
ib = ib % 10
ic = ic % 100
ic = ic // 10
id = id / 100
id = int(id % 10)
if ia == ib ** 3 + ic ** 3 + id ** 3:
print(ia, "是水仙花数")
其中,ia即对100到999的遍历的数字,而ib 为ia个位数,ic为十位数,id为百位数,通过遍历和判断即可求得水仙花数。输出结果为:
153 是水仙花数
370 是水仙花数
371 是水仙花数
407 是水仙花数
同样的,for循环结构也能与else结合,作用和结束/执行条件与 while中类似,此处不再赘述。