提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
目录
一、for 循环和循环范围
for 循环的特点
基于提供的范围,重复执行特定次数的操作
def sumFromMToN(m, n):
total = 0 # 注意: range(x, y) 是左闭右开区间,包含 x,不包含 y
for x in range(m, n+1):
total += x
return total
sumFromMToN(5, 10)
45
sumFromMToN(5, 10) == 5+6+7+8+9+10
True
range()
是个什么东西?
range函数返回一个range类型的整数序列,一般用在循环结构中
语法:range(start, stop, step)
返回值
range函数返回一个range对象实例。实例包含了计数的起始位置、终点位置和步长等信息。
其实在这里,我们也可以不用循环来完成同样的任务
def sumFromMToN(m, n):
return sum(range(m, n+1))
sumFromMToN(5, 10)
45
如果我们省略第一个参数会发生什么?
def sumToN(n):
total = 0
# range 起始范围默认为 0
for x in range(n+1):
total += x
return total
sumToN(5)
15
那如果我们添加第三个参数呢?
def sumEveryKthFromMToN(m, n, k):
total = 0 # 第三个参数为 “步长” step
for x in range(m, n+1, k):
total += x
return total
sumEveryKthFromMToN(5, 20, 7) == (5 + 12 + 19)
True
只对从 m
到 n
的 奇数求和
def sumOfOddsFromMToN(m, n):
total = 0
for x in range(m, n+1):
if x % 2 == 1:
total += x
return total
sumOfOddsFromMToN(4, 10) == sumOfOddsFromMToN(5,9) == (5+7+9)
True
二丶for 循环嵌套
# 下面的代码将输出二维坐标
def printCoordinates(xMax, yMax):
for x in range(1, xMax+1):
for y in range(1, yMax+1):
print(f"( {x} , {y} ) ", end="")
print() #每一行循环结束,利用print()默认参数end换行
printCoordinates(5, 5)
( 1 , 1 ) ( 1 , 2 ) ( 1 , 3 ) ( 1 , 4 ) ( 1 , 5 ) ( 2 , 1 ) ( 2 , 2 ) ( 2 , 3 ) ( 2 , 4 ) ( 2 , 5 ) ( 3 , 1 ) ( 3 , 2 ) ( 3 , 3 ) ( 3 , 4 ) ( 3 , 5 ) ( 4 , 1 ) ( 4 , 2 ) ( 4 , 3 ) ( 4 , 4 ) ( 4 , 5 ) ( 5 , 1 ) ( 5 , 2 ) ( 5 , 3 ) ( 5 , 4 ) ( 5 , 5 )
三丶while 循环
嘿!
当你不知道循环什么时候停下来的时候,为什么不试试 while
找出一个数最左边的那一位的数值(12345
的 1
)
# 我不知道它什么时候停下来
def leftmostDigit(n):
n = abs(n)
while n >= 10:
n = n//10
return n
leftmostDigit(46535248)
4
举个例子:依次找出 n 个 4 或者 7 的整数倍非负整数
def isMultipleOf4or7(x):
return ((x % 4) == 0) or ((x % 7) == 0)def nthMultipleOf4or7(n):
found = 0
guess = -1
while found <= n:
guess += 1
if isMultipleOf4or7(guess):
found += 1
return guess
print("4 或 7 的倍数: ", end="")
for n in range(15):
print(nthMultipleOf4or7(n), end=" ")
4 或 7 的倍数: 0 4 7 8 12 14 16 20 21 24 28 32 35 36 40
四丶break 与 continue 语句
for n in range(200):
if n % 3 == 0:
continue # 跳过这次循环
elif n == 8:
break # 跳出当前整个循环
else:
pass # 啥也不做,占位符(不会被运行)
print(n, end=" ")
1 2 4 5 7
假·死循环
与环境交互后,在特定条件下终止的循环
def readUntilDone():
linesEntered = 0
while True:
response = input("输入一个字符串(输入 done 则退出): ")
if response == "done":
break
print("你输入了: ", response)
linesEntered += 1
print("Bye!")
return linesEntered
linesEntered = readUntilDone()
print("你输入了", linesEntered, "行 (不包括 'done').")
你输入了: learn 你输入了: python 你输入了: the 你输入了: smart 你输入了: way Bye! 你输入了 5 行 (不包括 'done').
总结
- For 循环用于指定范围的重复操作。
range()
可以生成一个数字范围。- 在不知道循环什么时间停止的时候,应该试试 While 循环。
- 循环同样也是可以嵌套的。
- 巧妙地使用
break
和continue
语句。 - 合理的剪枝,缩小搜索范围/循环范围,可以大幅提高程序运行效率。