概述
循环是编程中最核心的概念之一,它允许我们重复执行代码块。python提供了两种主要的循环结构:for循环和while循环。掌握循环的使用对于解决各种编程问题至关重要。
for 循环
基本语法
for 变量 in 序列:
# 循环体
pass
基本使用示例
1. 遍历数字范围
# 遍历 0 到 4
for i in range(5):
print(i)
# 输出: 0, 1, 2, 3, 4
# 遍历 1 到 5
for i in range(1, 6):
print(i)
# 输出: 1, 2, 3, 4, 5
# 步长为2的遍历
for i in range(0, 10, 2):
print(i)
# 输出: 0, 2, 4, 6, 8
2. 计算累加和
# 初始化变量
a = 0
# 循环计算并打印结果
for i in range(101): # 0到100
a += i
print(f"求和a的值为:{a}")
# 输出: 求和a的值为:5050
多种求和方法对比
# 方法一:使用for循环累加
def sum_method1(n):
total = 0
for i in range(1, n + 1):
total += i
return total
# 方法二:等差数列公式(最高效)
def sum_method2(n):
return n * (1 + n) // 2 # 使用整数除法
# 方法三:使用sum()和range()
def sum_method3(n):
return sum(range(1, n + 1))
# 测试三种方法
n = 100
print(f"1到{n}的和为:{sum_method1(n)}") # 输出: 1到100的和为:5050
print(f"1到{n}的和为:{sum_method2(n)}") # 输出: 1到100的和为:5050
print(f"1到{n}的和为:{sum_method3(n)}") # 输出: 1到100的和为:5050
while 循环
基本语法
while 条件:
# 循环体
pass
基本使用示例
# 初始化变量
total_sum = 0
count = 0
upper_limit = 100 # 设置上限值,便于维护
# while 循环计算 1 到 100 的和
while count < upper_limit:
count += 1
total_sum += count
# 打印最终结果
print(f"1到{upper_limit}的和为:{total_sum}")
# 输出: 1到100的和为:5050
while循环的实际应用
# 用户输入验证
def get_valid_number():
while true:
try:
user_input = input("请输入一个正整数: ")
number = int(user_input)
if number > 0:
return number
else:
print("请输入正整数!")
except valueerror:
print("请输入有效的数字!")
# 密码验证系统
def password_check():
max_attempts = 3
attempts = 0
correct_password = "123456"
while attempts < max_attempts:
password = input("请输入密码: ")
if password == correct_password:
print("密码正确!")
return true
else:
attempts += 1
remaining = max_attempts - attempts
if remaining > 0:
print(f"密码错误!还有{remaining}次机会")
else:
print("密码错误次数过多,程序退出")
return false
range() 函数详解
基本用法
# range(stop) - 从0到stop-1 print(list(range(5))) # [0, 1, 2, 3, 4] # range(start, stop) - 从start到stop-1 print(list(range(2, 8))) # [2, 3, 4, 5, 6, 7] # range(start, stop, step) - 步长为step print(list(range(0, 10, 2))) # [0, 2, 4, 6, 8] print(list(range(10, 0, -1))) # [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
实用技巧
# 反向遍历
for i in range(10, 0, -1):
print(i, end=" ")
print() # 输出: 10 9 8 7 6 5 4 3 2 1
# 隔行处理
numbers = list(range(1, 21))
for i in range(0, len(numbers), 2):
print(f"第{i}个元素: {numbers[i]}")
# 创建等差数列
arithmetic_sequence = list(range(5, 50, 5))
print(f"等差数列: {arithmetic_sequence}")
# 输出: 等差数列: [5, 10, 15, 20, 25, 30, 35, 40, 45]
循环控制语句
break 语句
# 提前退出循环
for i in range(10):
if i == 5:
break
print(i, end=" ")
print() # 输出: 0 1 2 3 4
# 在while循环中使用break
count = 0
while true:
count += 1
if count > 5:
break
print(count, end=" ")
print() # 输出: 1 2 3 4 5
continue 语句
# 跳过当前迭代
for i in range(10):
if i % 2 == 0: # 跳过偶数
continue
print(i, end=" ")
print() # 输出: 1 3 5 7 9
# 打印奇数的另一种方法
for i in range(1, 11):
if i % 2 != 0:
print(i, end=" ")
print() # 输出: 1 3 5 7 9
else 子句
# for循环的else(正常结束时执行)
for i in range(5):
print(i)
else:
print("循环正常结束")
# while循环的else
count = 0
while count < 3:
print(count)
count += 1
else:
print("while循环正常结束")
# break会跳过else
for i in range(5):
if i == 3:
break
print(i)
else:
print("这行不会执行") # 不会执行
循环遍历不同数据结构
1. 遍历列表
# 基本列表遍历
fruits = ["苹果", "香蕉", "橙子", "葡萄"]
for fruit in fruits:
print(fruit)
# 带索引的遍历
for index, fruit in enumerate(fruits):
print(f"索引{index}: {fruit}")
# 反向遍历
for fruit in reversed(fruits):
print(fruit)
# 列表切片遍历
numbers = list(range(10))
for num in numbers[2:8]: # 遍历索引2到7的元素
print(num)
2. 遍历元组
# 基本元组遍历
coordinates = (10, 20, 30)
for coord in coordinates:
print(coord)
# 元组解包遍历
points = [(1, 2), (3, 4), (5, 6)]
for x, y in points:
print(f"x={x}, y={y}")
3. 遍历字典
# 遍历字典的键
student = {"姓名": "张三", "年龄": 20, "成绩": 85}
for key in student:
print(f"{key}: {student[key]}")
# 遍历键值对
for key, value in student.items():
print(f"{key} = {value}")
# 遍历值
for value in student.values():
print(value)
# 遍历键
for key in student.keys():
print(key)
4. 遍历集合
# 集合遍历(无序)
unique_numbers = {1, 2, 3, 4, 5}
for num in unique_numbers:
print(num)
# 集合排序后遍历
for num in sorted(unique_numbers):
print(num)
5. 遍历字符串
# 字符串遍历
text = "hello"
for char in text:
print(char)
# 带索引遍历字符串
for index, char in enumerate(text):
print(f"位置{index}: '{char}'")
# 反向遍历字符串
for char in reversed(text):
print(char, end="")
print() # 输出: olleh
嵌套循环
基本嵌套循环
# 打印乘法表
print("=== 九九乘法表 ===")
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{j}×{i}={i*j}", end="\t")
print() # 换行
# 矩阵遍历
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print("\n=== 矩阵遍历 ===")
for row in matrix:
for element in row:
print(element, end=" ")
print()
嵌套循环的实际应用
# 寻找质数
def find_primes(limit):
primes = []
for num in range(2, limit + 1):
is_prime = true
for i in range(2, int(num ** 0.5) + 1):
if num % i == 0:
is_prime = false
break
if is_prime:
primes.append(num)
return primes
# 找出1到50的所有质数
prime_numbers = find_primes(50)
print(f"1到50的质数: {prime_numbers}")
# 图案打印
def print_pattern(rows):
print("\n=== 星号图案 ===")
for i in range(1, rows + 1):
# 打印空格
for j in range(rows - i):
print(" ", end="")
# 打印星号
for k in range(2 * i - 1):
print("*", end="")
print()
print_pattern(5)
列表推导式
基本语法
# [表达式 for 变量 in 序列] # [表达式 for 变量 in 序列 if 条件]
实用示例
# 创建平方数列表
squares = [x**2 for x in range(1, 11)]
print(f"平方数: {squares}")
# 输出: 平方数: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
# 筛选偶数
numbers = list(range(1, 21))
even_numbers = [x for x in numbers if x % 2 == 0]
print(f"偶数: {even_numbers}")
# 输出: 偶数: [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
# 条件表达式
processed = [x if x % 2 == 0 else -x for x in range(1, 11)]
print(f"处理后的数: {processed}")
# 输出: 处理后的数: [-1, 2, -3, 4, -5, 6, -7, 8, -9, 10]
# 嵌套列表推导式
matrix = [[i*j for j in range(1, 4)] for i in range(1, 4)]
print(f"乘法矩阵: {matrix}")
# 输出: 乘法矩阵: [[1, 2, 3], [2, 4, 6], [3, 6, 9]]
# 字符串处理
words = ["hello", "world", "python"]
uppercase_words = [word.upper() for word in words]
word_lengths = [len(word) for word in words]
print(f"大写: {uppercase_words}")
print(f"长度: {word_lengths}")
实用示例
1. 数学计算类
# 计算阶乘
def factorial(n):
result = 1
for i in range(1, n + 1):
result *= i
return result
# 计算斐波那契数列
def fibonacci(n):
fib_sequence = [0, 1]
for i in range(2, n):
fib_sequence.append(fib_sequence[i-1] + fib_sequence[i-2])
return fib_sequence[:n]
# 测试
print(f"5的阶乘: {factorial(5)}") # 输出: 5的阶乘: 120
print(f"前10项斐波那契数: {fibonacci(10)}")
# 输出: 前10项斐波那契数: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
2. 数据处理类
# 学生成绩统计
def analyze_grades(grades):
total = 0
count = 0
max_grade = float('-inf')
min_grade = float('inf')
for grade in grades:
total += grade
count += 1
if grade > max_grade:
max_grade = grade
if grade < min_grade:
min_grade = grade
average = total / count if count > 0 else 0
return {
'总分': total,
'平均分': round(average, 2),
'最高分': max_grade,
'最低分': min_grade,
'人数': count
}
# 测试数据
student_grades = [85, 92, 78, 96, 88, 73, 91, 84]
result = analyze_grades(student_grades)
for key, value in result.items():
print(f"{key}: {value}")
3. 搜索和过滤类
# 在列表中搜索元素
def search_element(lst, target):
for index, element in enumerate(lst):
if element == target:
return index
return -1 # 未找到
# 过滤满足条件的元素
def filter_elements(lst, condition_func):
result = []
for element in lst:
if condition_func(element):
result.append(element)
return result
# 测试
numbers = [1, 5, 8, 12, 15, 23, 8, 30]
print(f"数字8的位置: {search_element(numbers, 8)}") # 输出: 数字8的位置: 2
# 过滤大于10的数
greater_than_10 = filter_elements(numbers, lambda x: x > 10)
print(f"大于10的数: {greater_than_10}") # 输出: 大于10的数: [12, 15, 23, 30]
4. 游戏相关
# 猜数字游戏
import random
def guess_number_game():
secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 7
print("=== 猜数字游戏 ===")
print("我想了一个1到100之间的数字,你有7次机会猜中它!")
while attempts < max_attempts:
try:
guess = int(input(f"第{attempts + 1}次猜测: "))
attempts += 1
if guess == secret_number:
print(f"恭喜你!用了{attempts}次就猜中了!")
return
elif guess < secret_number:
print("太小了!")
else:
print("太大了!")
remaining = max_attempts - attempts
if remaining > 0:
print(f"还有{remaining}次机会")
except valueerror:
print("请输入有效的数字!")
print(f"游戏结束!正确答案是{secret_number}")
# 使用示例(取消注释运行)
# guess_number_game()
性能优化建议
1. 选择合适的循环方式
import time
# 性能测试函数
def performance_test():
n = 1000000
# 方法1: for循环
start_time = time.time()
total1 = 0
for i in range(n):
total1 += i
time1 = time.time() - start_time
# 方法2: 数学公式(最快)
start_time = time.time()
total2 = n * (n - 1) // 2
time2 = time.time() - start_time
# 方法3: sum函数
start_time = time.time()
total3 = sum(range(n))
time3 = time.time() - start_time
print(f"for循环耗时: {time1:.4f}秒")
print(f"数学公式耗时: {time2:.4f}秒")
print(f"sum函数耗时: {time3:.4f}秒")
# performance_test() # 取消注释运行性能测试
2. 避免不必要的循环
# ❌ 不好的做法
numbers = list(range(1000))
result = []
for num in numbers:
if num % 2 == 0:
result.append(num * 2)
# ✅ 更好的做法(使用列表推导式)
result = [num * 2 for num in numbers if num % 2 == 0]
# ✅ 最佳做法(如果只是检查存在性)
def has_even_square(numbers):
# 使用any()避免完整遍历
return any(num % 2 == 0 for num in numbers)
3. 循环优化技巧
# 缓存循环条件
items = list(range(10000))
length = len(items) # 缓存长度
# ❌ 每次都调用len()
for i in range(len(items)):
pass
# ✅ 使用缓存的长度
for i in range(length):
pass
# 减少循环内的计算
expensive_calc = lambda x: x ** 2 + x * 3 + 1
# ❌ 在循环内重复计算
results = []
for i in range(1000):
results.append(expensive_calc(i))
# ✅ 预计算或使用缓存
cache = {}
results = []
for i in range(1000):
if i not in cache:
cache[i] = expensive_calc(i)
results.append(cache[i])
学习建议
- 从简单开始 - 先掌握基本的for和while循环
- 多练习 - 通过实际例子加深理解
- 理解差异 - 明白for和while的适用场景
- 注意效率 - 学会选择最优的循环方式
- 善用工具 - 学会使用enumerate、zip等辅助函数
常见错误提醒
# ❌ 无限循环
# while true:
# print("这会一直运行下去")
# ✅ 正确的无限循环(有退出条件)
count = 0
while true:
count += 1
if count > 5:
break
print(count)
# ❌ 修改正在遍历的列表
# lst = [1, 2, 3, 4, 5]
# for item in lst:
# if item % 2 == 0:
# lst.remove(item) # 可能导致意外行为
# ✅ 正确做法:创建新列表
lst = [1, 2, 3, 4, 5]
new_lst = [item for item in lst if item % 2 != 0]
print(new_lst) # [1, 3, 5]
本文档基于你的实际代码整理而成,包含了完整的语法说明和实用示例
以上就是python中实现循环遍历的完全指南的详细内容,更多关于python循环遍历的资料请关注代码网其它相关文章!
发表评论