https://hydro.ac/d/datawhale_p2s/user/32906
目录
FOR循环
基于提供范围,重复执行某操作
def sumFromMToN(m,n):
total = 0
for x in range(m, n+1):
total += x #total即为m到n的累加
return total
该代码也等价于:
def sumFromMToN(m, n):
return sum(range(m, n+1))
range知识点
range(m, n)左闭右开,包括m不包括n,且m与n之间无固定大小关系;
range可视为一个数列,其实质为生成器;
range(n),省略了第一个参数,则默认起始范围为0;
range(m, n, k),k为步长step,eg.range(5, 20, 7),生成5,12,19;其中k = -1时,range生成器是反着的,相当于reversed()函数。
简单的for循环可以进行"奇偶数求和"等操作
FOR循环嵌套
Python中 FOR 循环速度很慢,一般不建议在Python中进行多层 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()
如果想执行不分次数的代码,可以将 for x in range(n) 中"x"改为下划线"_",即 for _ in range(n)。
while 循环
用于未知次数的循环 # while后是一个表达式
# 确定某个数最左边的数字
def leftmostDigit(n):
n = abs(n) # 取绝对值
while n >= 10: #若 n >= 10 成立,执行下一行代码;若 n >= 10 为假,执行return
n = n//10
return n
break
跳出当前整个循环
continue
跳过某次循环
pass
作为占位符存在,不会被运行
它们可以在假·死循环(与环境交互后,在特定条件下终止的循环)中存在。
其他知识点:
剪枝法:缩短循环运行时间
用if条件降低代码运行次数,比如判断某数是否为质数(只能被1和它本身整除)
def isPrime(n):
if n < 2:
return False
for factor in range(2,n):
if n % factor == 0:
return False
return True
# 快了一点
def fasterIsPrime(n):
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0: #除去2的其他偶数都不是质数
return False
maxFactor = round(n**0.5)
for factor in range(3, maxFactor+1, 2):
if n % factor == 0:
return False
return True
如图,第二个代码排除了偶数的循环运算,减少了近一半的运算量
总结
- For 循环用于指定范围的重复操作。
- `range()` 可以生成一个数字范围。
- 在不知道循环什么时间停止的时候,应该试试 While 循环。
- 循环同样也是可以嵌套的。
- 巧妙地使用 `break` 和 `continue` 语句。
- 合理的剪枝,缩小搜索范围/循环范围,可以大幅提高程序运行效率。
自己的实践
- range通常与for循环搭配出现,但for循环不仅仅能够与range搭配,它还可以与字符串、元组、列表等连用 #类似包含的关系?
- 对某个数字a,可以通过“ // 10”和“ % 10”得到它的各十百千位数字