免费编程软件「python+pycharm」
链接:https://pan.quark.cn/s/48a86be2fdc0
在Python编程中,循环语句是控制程序流程的核心工具之一。它让代码能够重复执行特定操作,避免冗余的重复编写。本文将通过实际案例和通俗解释,带你掌握Python循环语句的精髓,从基础语法到进阶技巧,用最直观的方式理解循环的工作原理。
想象你正在处理一份学生成绩单,需要计算100名学生的平均分。如果没有循环,你需要为每个学生写一段相同的代码:
# 无循环的冗余写法(仅展示3名学生)
score1 = 85
score2 = 90
score3 = 78
total = score1 + score2 + score3
average = total / 3
当学生数量增加到100人时,这种写法显然不现实。循环的作用就是让计算机自动完成重复操作,你只需告诉它"重复做什么"和"重复多少次"。
Python中的循环主要分为两类:for
循环(明确次数)和while
循环(条件满足时持续)。它们就像工厂里的两条生产线,分别适用于不同场景。
for
循环的核心是遍历一个序列(列表、元组、字符串等),对每个元素执行相同操作。基本结构如下:
for 变量 in 序列:
# 循环体
案例1:计算列表总和
scores = [85, 90, 78, 92, 88]
total = 0
for score in scores:
total += score # 等价于 total = total + score
print("平均分:", total / len(scores))
运行结果:
平均分: 86.6
这里 for 循环依次取出 scores 中的每个分数,累加到 total 变量中,最后计算平均值。
当需要固定次数的循环时,range()
函数是最佳搭档。它生成一个数字序列,常用于控制循环次数。
语法:
range(start, stop, step)
# start: 起始值(默认0)
# stop: 结束值(不包含)
# step: 步长(默认1)
案例2:打印1到10的奇数
for i in range(1, 11, 2): # 从1开始,到10结束(不含),步长2
print(i, end=" ")
输出:
1 3 5 7 9
字典的for
循环默认遍历键,若需同时获取键值对,可使用.items()
方法。
案例3:统计单词频率
word_counts = {"apple": 3, "banana": 2, "orange": 5}
for word, count in word_counts.items():
print(f"{word}出现了{count}次")
输出:
apple出现了3次
banana出现了2次
orange出现了5次
当需要处理二维数据(如矩阵)时,嵌套for
循环非常实用。
案例4:打印乘法表
for i in range(1, 10): # 外层循环控制行
for j in range(1, i+1): # 内层循环控制列
print(f"{j}x{i}={i*j}", end="\t")
print() # 每行结束后换行
输出(前3行):
1x1=1
1x2=2 2x2=4
1x3=3 2x3=6 3x3=9
与for
循环的固定次数不同,while
循环在条件为真时持续执行,适合不确定循环次数的场景。
while 条件:
# 循环体
案例5:猜数字游戏
import random
target = random.randint(1, 100)
guess = None
while guess != target:
guess = int(input("猜一个1-100的数字: "))
if guess < target:
print("太小了!")
elif guess > target:
print("太大了!")
print("恭喜猜中!")
这个游戏中,while 循环会持续询问用户输入,直到猜中正确数字。
while
循环必须包含能最终使条件变为假的逻辑,否则会形成无限循环。
错误示范:
while True: # 缺少退出条件
print("无限循环中...")
修正方法:添加break
语句
count = 0
while True:
print("当前计数:", count)
count += 1
if count >= 5: # 当计数达到5时退出
break
break
:立即终止整个循环continue
:跳过当前迭代,进入下一次循环案例6:筛选偶数
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for num in numbers:
if num % 2 != 0: # 如果是奇数
continue # 跳过本次循环
print(num, end=" ")
输出:
2 4 6 8
案例7:寻找质数
num = int(input("输入一个数字检查是否为质数: "))
i = 2
is_prime = True
while i * i <= num: # 只需检查到√num
if num % i == 0:
is_prime = False
break
i += 1
print("是质数" if is_prime else "不是质数")
Python提供了一种更简洁的循环写法——列表推导式,能在一行代码中完成循环和列表生成。
语法:
[表达式 for 变量 in 序列]
案例8:生成平方数列表
squares = [x**2 for x in range(1, 6)]
print(squares) # 输出: [1, 4, 9, 16, 25]
带条件的列表推导式:
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares) # 输出: [4, 16, 36, 64, 100]
在遍历序列时,经常需要同时获取索引和值,enumerate()
函数可以完美解决这个问题。
案例9:打印带索引的列表元素
fruits = ["apple", "banana", "orange"]
for index, fruit in enumerate(fruits):
print(f"索引{index}: {fruit}")
输出:
索引0: apple
索引1: banana
索引2: orange
当需要同时遍历多个序列时,zip()
函数可以将它们"压缩"在一起。
案例10:合并学生姓名和成绩
names = ["Alice", "Bob", "Charlie"]
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(f"{name}的成绩是{score}")
输出:
Alice的成绩是85
Bob的成绩是90
Charlie的成绩是78
循环体中的计算会重复执行,应尽量将不依赖循环变量的计算移到循环外。
低效写法:
for i in range(1000):
result = i * (len(some_list) + 1) # len()在每次循环都计算
高效写法:
list_length = len(some_list) + 1
for i in range(1000):
result = i * list_length # 只需计算一次
嵌套循环的时间复杂度是O(n²),当数据量大时性能会急剧下降。
低效案例:查找两个列表的共同元素
list1 = [1, 2, 3, 4, 5]
list2 = [4, 5, 6, 7, 8]
common = []
for x in list1:
for y in list2:
if x == y:
common.append(x)
高效解决方案:使用集合
set1 = set(list1)
set2 = set(list2)
common = list(set1 & set2) # 交集操作
处理大数据时,生成器可以节省内存,因为它逐个产生值而不是一次性生成所有值。
案例11:读取大文件
def read_large_file(file_path):
with open(file_path, 'r') as file:
for line in file: # 逐行读取,不占用大量内存
yield line.strip()
for line in read_large_file("huge_file.txt"):
process(line) # 处理每一行
import requests
from bs4 import BeautifulSoup
def extract_links(url):
response = requests.get(url)
soup = BeautifulSoup(response.text, 'html.parser')
links = []
for link in soup.find_all('a'): # 查找所有<a>标签
href = link.get('href')
if href and href.startswith('http'):
links.append(href)
return links
website_links = extract_links("https://example.com")
for link in website_links[:5]: # 打印前5个链接
print(link)
这个案例展示了如何用 for 循环遍历HTML标签,提取网页中的所有外部链接。
import pandas as pd
# 模拟数据
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David'],
'Math': [85, 90, 78, 92],
'English': [88, 92, 85, 89]
}
df = pd.DataFrame(data)
# 计算每门课的平均分
for subject in ['Math', 'English']:
avg_score = df[subject].mean()
print(f"{subject}平均分: {avg_score:.2f}")
# 找出所有科目都高于85分的学生
high_achievers = []
for _, row in df.iterrows(): # 遍历DataFrame的每一行
if all(row[1:] > 85): # 检查Math和English列
high_achievers.append(row['Name'])
print("优秀学生:", high_achievers)
输出:
Math平均分: 86.25
English平均分: 88.50
优秀学生: ['Bob', 'David']
for
循环 + range()
while
循环for
循环break
continue
Python的循环语句虽然简单,但通过灵活组合和优化,可以解决从基础数据处理到复杂算法实现的各种问题。理解其核心原理后,你会发现循环是构建高效、优雅代码的基石之一。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。