循环语句允许我们重复执行一段代码,直到满足特定条件。
Python 提供了两种主要的循环结构:
- while 循环:在条件为真时重复执行
- for 循环:遍历序列中的每个元素
while 循环
基本语法
示例
# 示例 1:简单的 while 循环count = 0while count < 5: print(f"当前计数:{count}") count += 1print("循环结束")# 示例 2:计算 1 到 100 的和sum_num = 0i = 1while i <= 100: sum_num += i i += 1print(f"1到100的和是:{sum_num}")# 示例 3:用户输入验证password = ""while password != "123456": password = input("请输入密码:") if password != "123456": print("密码错误,请重试!")print("密码正确,登录成功!")# 示例 4:无限循环(需要用 break 跳出)while True: user_input = input("输入 'quit' 退出:") if user_input == "quit": break print(f"你输入了:{user_input}")
while...else 语句
# while 循环正常结束时会执行 else 块count = 0while count < 5: print(count) count += 1else: print("循环正常结束")# 如果使用 break 跳出,则不会执行 elsecount = 0while count < 10: if count == 5: break print(count) count += 1else: print("这句不会被打印")
for 循环
基本语法
示例
# 示例 1:遍历列表fruits = ["苹果", "香蕉", "橙子", "葡萄"]for fruit in fruits: print(f"我喜欢吃{fruit}")# 示例 2:遍历字符串for char in "Python": print(char)# 示例 3:使用 range() 函数# range(stop)for i in range(5): print(i) # 输出 0 1 2 3 4# range(start, stop)for i in range(1, 6): print(i) # 输出 1 2 3 4 5# range(start, stop, step)for i in range(0, 10, 2): print(i) # 输出 0 2 4 6 8# 示例 4:遍历字典student = {"name": "张三", "age": 20, "grade": "A"}# 遍历键for key in student: print(key)# 遍历值for value in student.values(): print(value)# 遍历键值对for key, value in student.items(): print(f"{key}: {value}")# 示例 5:使用 enumerate() 获取索引fruits = ["苹果", "香蕉", "橙子"]for index, fruit in enumerate(fruits): print(f"索引 {index}: {fruit}")# 从指定索引开始for index, fruit in enumerate(fruits, start=1): print(f"第 {index} 个水果: {fruit}")
for...else 语句
# for 循环正常结束时执行 elsefor i in range(5): print(i)else: print("循环正常结束")# 使用 break 跳出时不执行 elsefor i in range(10): if i == 5: break print(i)else: print("这句不会被打印")
循环控制语句
1. break 语句
break 用于完全终止循环。
# 示例 1:找到第一个偶数就退出numbers = [1, 3, 5, 8, 9, 10]for num in numbers: if num % 2 == 0: print(f"找到第一个偶数:{num}") break# 示例 2:while 循环中使用 breakcount = 0while True: print(count) count += 1 if count >= 5: break
2. continue 语句
continue 用于跳过当前迭代,继续下一次循环。
# 示例 1:跳过偶数,只打印奇数for i in range(10): if i % 2 == 0: continue print(i) # 只打印 1 3 5 7 9# 示例 2:跳过特定值fruits = ["苹果", "香蕉", "橙子", "葡萄"]for fruit in fruits: if fruit == "橙子": continue print(fruit) # 不会打印"橙子"
3. pass 语句
pass 是空语句,不做任何事情,用作占位符。
# 示例 1:占位符for i in range(5): if i == 3: pass # 暂时不处理,以后再添加代码 else: print(i)# 示例 2:空循环体for item in []: pass
循环嵌套
循环内部可以嵌套另一个循环。
# 示例 1:打印乘法口诀表for i in range(1, 10): for j in range(1, i + 1): print(f"{j}×{i}={i*j}", end="\t") print() # 换行# 示例 2:打印图案for i in range(1, 6): for j in range(i): print("*", end="") print()# 输出:# *# **# ***# ****# *****# 示例 3:遍历二维列表matrix = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]]for row in matrix: for item in row: print(item, end=" ") print()# 示例 4:嵌套循环中使用 breakfor i in range(3): for j in range(3): if i == 1 and j == 1: break # 只跳出内层循环 print(f"i={i}, j={j}")
实战案例
案例 1:猜数字游戏
import random# 生成 1-100 的随机数secret_number = random.randint(1, 100)attempts = 0max_attempts = 7print("欢迎来到猜数字游戏!")print(f"我想了一个 1-100 之间的数字,你有 {max_attempts} 次机会。")while attempts < max_attempts: guess = int(input("请输入你的猜测:")) attempts += 1 if guess == secret_number: print(f"恭喜你!猜对了!答案是 {secret_number}") print(f"你用了 {attempts} 次机会") break elif guess < secret_number: print("太小了!") else: print("太大了!") print(f"剩余机会:{max_attempts - attempts}")else: print(f"游戏结束!答案是 {secret_number}")
案例 2:质数判断
# 判断一个数是否为质数def is_prime(n): if n < 2: return False for i in range(2, int(n ** 0.5) + 1): if n % i == 0: return False return True# 打印 1-100 之间的所有质数print("1-100 之间的质数:")count = 0for num in range(2, 101): if is_prime(num): print(num, end=" ") count += 1 if count % 10 == 0: print() # 每10个换行
案例 3:斐波那契数列
# 方法 1:使用 while 循环def fibonacci_while(n): a, b = 0, 1 count = 0 print("斐波那契数列:") while count < n: print(a, end=" ") a, b = b, a + b count += 1 print()fibonacci_while(10)# 方法 2:使用 for 循环def fibonacci_for(n): fib_list = [] a, b = 0, 1 for _ in range(n): fib_list.append(a) a, b = b, a + b return fib_listprint(fibonacci_for(10))
案例 4:学生成绩管理
students = []while True: print("\n学生成绩管理系统") print("1. 添加学生") print("2. 显示所有学生") print("3. 计算平均分") print("4. 退出") choice = input("请选择操作(1-4):") if choice == "1": name = input("请输入学生姓名:") score = float(input("请输入学生成绩:")) students.append({"name": name, "score": score}) print("添加成功!") elif choice == "2": if not students: print("暂无学生信息") else: print("\n所有学生信息:") for i, student in enumerate(students, 1): print(f"{i}. {student['name']}: {student['score']}分") elif choice == "3": if not students: print("暂无学生信息") else: total = sum(student['score'] for student in students) average = total / len(students) print(f"平均分:{average:.2f}") elif choice == "4": print("感谢使用,再见!") break else: print("无效选择,请重试")
案例 5:打印各种图案
# 图案 1:直角三角形print("直角三角形:")for i in range(1, 6): print("* " * i)print("\n倒直角三角形:")for i in range(5, 0, -1): print("* " * i)print("\n等腰三角形:")for i in range(1, 6): print(" " * (5 - i) + "* " * i)print("\n菱形:")# 上半部分for i in range(1, 5): print(" " * (5 - i) + "* " * i)# 下半部分for i in range(5, 0, -1): print(" " * (5 - i) + "* " * i)print("\n数字金字塔:")for i in range(1, 6): print(" " * (5 - i), end="") for j in range(1, i + 1): print(j, end=" ") print()
循环性能优化技巧
# 技巧 1:使用列表推导式(更快)# 传统方式squares = []for i in range(10): squares.append(i ** 2)# 列表推导式squares = [i ** 2 for i in range(10)]# 技巧 2:避免在循环中重复计算# 不好的做法for i in range(len(my_list)): # len(my_list) 会被重复计算# 好的做法length = len(my_list)for i in range(length): pass# 技巧 3:使用 enumerate 代替 range(len())# 不好的做法for i in range(len(fruits)): print(i, fruits[i])# 好的做法for i, fruit in enumerate(fruits): print(i, fruit)# 技巧 4:使用 zip 同时遍历多个列表names = ["张三", "李四", "王五"]scores = [85, 90, 78]for name, score in zip(names, scores): print(f"{name}: {score}分")