#### Chapter 5 循环 Loop###############
#for 循环和循环范围 基于提供的范围,重复执行特定次数的操作
def sumFromMToN(m, n):
total = 0
# 注意: range(x, y) 是左闭右开区间,包含 x,不包含 y
for x in range(m, n+1):
total += x
return total
print(sumFromMToN(5, 10))#5到10的和
def sumFromMToN(m, n):
return sum(range(m, n+1))
print(sumFromMToN(5, 10))
##range()生成数列
def sumToN(n):
total = 0
# range 省略第一个参数,起始范围默认为 0
for x in range(n+1):
total += x
return total
print(sumToN(5))
#添加第三个参数,第三个参数为 “步长” step
def sumEveryKthFromMToN(m, n, k):
total = 0
for x in range(m, n+1, k):
total += x
return total
print(sumEveryKthFromMToN(5, 20, 7))
#可以求等差数列的和
#只对从 m 到 n 的 奇数求和
# 通过修改循环内部的代码来改变步长
def sumOfOddsFromMToN(m, n):
total = 0
for x in range(m, n+1):
if x % 2 == 1:
total += x
return total
print(sumOfOddsFromMToN(4, 10))
#生成一个反向数字序列,不建议操作
def sumOfOddsFromMToN(m, n):
total = 0
for x in range(n, m-1, -1):
if x % 2 == 1:
total += x
return total
####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(printCoordinates(5, 5))
def Stars(n, m):
# 输出一个 n*m 的星型矩阵图
for row in range(n):
for col in range(m):
print("*", end="")
print()
print(Stars(5, 5))
def printMysteryStarShape(n):
for row in range(n):
print(row, end=" ")
for col in range(row):
print("*", end=" ")
print()
print(printMysteryStarShape(5))
##### while 循环
#不知道循环什么时候停下来的时候使用
#找出一个数最左边的那一位的数值(12345 的 1 )
def leftmostDigit(n):
n = abs(n)
while n >= 10:
n = n//10
return n
print(leftmostDigit(46535248))
#依次找出 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=" ")
print(end="\n")
####break 与 continue 语句
for n in range(5):
for n in range(200):
if n % 3 == 0:
continue # 跳过这次循环
print("hello")#不被执行
elif n == 8:
break # 跳出当前整个循环
else:
pass # 什么都不做,占位符(不会被运行)
print(n, end=" ")
print("xx")
#假·死循环
#与环境交互后,在特定条件下终止的循环
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').")
#判断一个数是不是质数
def isPrime(n):
if n < 2:
return False
for factor in range(2,n):
if n % factor == 0:
return False
return True
print("0-100有哪些质数:")
for n in range(100):
if isPrime(n):
print(n, end=" ")
#faster IsPrime:
#剪枝 加快循环
def fasterIsPrime(n):
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0:
return False
maxFactor = round(n**0.5)
for factor in range(3, maxFactor+1, 2):
if n % factor == 0:
return False
return True
print("\n")
for n in range(100):
if fasterIsPrime(n):
print(n, end=" ")
#两种解法的结果一致
import time#导入库
bigPrime = 102030407
print("Timing isPrime(",bigPrime,")", end=" ")
# isPrime
time0 = time.time()
print(", returns ", isPrime(bigPrime), end=" ")
time1 = time.time()
print(", time = ",(time1-time0)*1000,"ms\n")
#time = 6337.381601333618 ms
# fasterIsPrime
print("Timing fasterIsPrime(",bigPrime,")", end=" ")
time0 = time.time()
print(", returns ", fasterIsPrime(bigPrime), end=" ")
time1 = time.time()
# result
print(", time = ",(time1-time0)*1000,"ms")
#time = 0.0 ms
#####依次找出第 n 位质数
def nthPrime(n):
found = 0
guess = 0
while found <= n:
guess += 1
if fasterIsPrime(guess):
found += 1
return guess
for n in range(10):
print(n, nthPrime(n))
print("Done!")
#生成随机矩阵
from random import random
def Mat(n,m):
for row in range (n):
for col in range(m):
print(random(),end="\t")
print()
print(Mat(5,5))
#总结
#For 循环用于指定范围的重复操作。
#range() 可以生成一个数字范围。
#在不知道循环什么时间停止的时候,应该试试 While 循环。
#循环同样也是可以嵌套的。
#巧妙地使用 break 和 continue 语句。
#合理的剪枝,缩小搜索范围/循环范围,可以大幅提高程序运行效率
Python基础05循环
于 2024-04-23 13:15:45 首次发布
本文详细介绍了Python中的for循环、range函数的用法,探讨了while循环、循环嵌套以及如何利用break和continue控制循环。还强调了循环效率的优化,如剪枝技巧和寻找质数的方法。
摘要由CSDN通过智能技术生成