跳转至

for循环与while循环

问题69:Python中有哪些循环语句?

Python中有两种主要的循环语句:

1. for循环

# 基本for循环
fruits = ["苹果", "香蕉", "橙子"]
for fruit in fruits:
    print(fruit)

# 使用range()函数
for i in range(5):
    print(i)  # 0, 1, 2, 3, 4

# 指定范围
for i in range(1, 6):
    print(i)  # 1, 2, 3, 4, 5

# 指定步长
for i in range(0, 10, 2):
    print(i)  # 0, 2, 4, 6, 8

2. while循环

# 基本while循环
count = 0
while count < 5:
    print(count)
    count += 1

# 条件循环
password = ""
while password != "123456":
    password = input("请输入密码: ")
print("密码正确!")

问题70:for循环的常见用法有哪些?

# 1. 遍历列表
numbers = [1, 2, 3, 4, 5]
for num in numbers:
    print(num * 2)

# 2. 遍历字符串
text = "Python"
for char in text:
    print(char)

# 3. 遍历字典
person = {"name": "张三", "age": 25, "city": "北京"}
for key, value in person.items():
    print(f"{key}: {value}")

# 4. 使用enumerate()获取索引
fruits = ["苹果", "香蕉", "橙子"]
for index, fruit in enumerate(fruits):
    print(f"{index}: {fruit}")

# 5. 使用zip()遍历多个序列
names = ["张三", "李四", "王五"]
ages = [25, 30, 28]
for name, age in zip(names, ages):
    print(f"{name}: {age}岁")

问题71:while循环的常见用法有哪些?

# 1. 计数器循环
count = 0
while count < 3:
    print(f"第{count + 1}次循环")
    count += 1

# 2. 条件循环
import random
target = random.randint(1, 10)
guess = 0
while guess != target:
    guess = int(input("猜一个1-10的数字: "))
    if guess < target:
        print("太小了")
    elif guess > target:
        print("太大了")
print("猜对了!")

# 3. 无限循环(需要break退出)
while True:
    user_input = input("输入'quit'退出: ")
    if user_input.lower() == 'quit':
        break
    print(f"你输入了: {user_input}")

# 4. 文件读取
# 模拟文件读取
lines = ["第一行", "第二行", "第三行"]
index = 0
while index < len(lines):
    print(lines[index])
    index += 1

问题72:循环中的break和continue如何使用?

# break - 跳出整个循环
for i in range(10):
    if i == 5:
        break
    print(i)  # 0, 1, 2, 3, 4

# continue - 跳过当前迭代
for i in range(5):
    if i == 2:
        continue
    print(i)  # 0, 1, 3, 4

# 实际应用示例
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for num in numbers:
    if num % 2 == 0:
        continue  # 跳过偶数
    if num > 7:
        break    # 遇到大于7的数就停止
    print(num)   # 1, 3, 5, 7

问题73:嵌套循环如何使用?

# 基本嵌套循环
for i in range(3):
    for j in range(3):
        print(f"({i}, {j})")

# 打印乘法表
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]
]

for row in matrix:
    for element in row:
        print(element, end=" ")
    print()

问题74:循环的else子句如何使用?

# for循环的else子句
for i in range(5):
    print(i)
else:
    print("循环正常结束")

# 如果循环被break中断,else不会执行
for i in range(5):
    if i == 3:
        break
    print(i)
else:
    print("这行不会执行")

# while循环的else子句
count = 0
while count < 3:
    print(count)
    count += 1
else:
    print("while循环正常结束")

# 实际应用:查找元素
def find_element(lst, target):
    for i, element in enumerate(lst):
        if element == target:
            print(f"找到元素 {target},位置: {i}")
            break
    else:
        print(f"未找到元素 {target}")

find_element([1, 2, 3, 4, 5], 3)  # 找到元素 3,位置: 2
find_element([1, 2, 3, 4, 5], 6)  # 未找到元素 6

问题75:循环的性能优化技巧有哪些?

# 1. 使用列表推导式替代简单循环
# 传统方式
squares = []
for i in range(10):
    squares.append(i**2)

# 列表推导式
squares = [i**2 for i in range(10)]

# 2. 使用生成器表达式处理大数据
# 传统方式(占用大量内存)
large_list = [i**2 for i in range(1000000)]

# 生成器表达式(节省内存)
large_generator = (i**2 for i in range(1000000))

# 3. 使用enumerate()替代range(len())
# 不推荐
fruits = ["苹果", "香蕉", "橙子"]
for i in range(len(fruits)):
    print(f"{i}: {fruits[i]}")

# 推荐
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

# 4. 使用zip()处理多个序列
# 不推荐
names = ["张三", "李四", "王五"]
ages = [25, 30, 28]
for i in range(len(names)):
    print(f"{names[i]}: {ages[i]}岁")

# 推荐
for name, age in zip(names, ages):
    print(f"{name}: {age}岁")

问题76:循环的实际应用场景有哪些?

# 1. 数据处理
def process_scores(scores):
    total = 0
    count = 0
    for score in scores:
        if score >= 0:  # 过滤无效分数
            total += score
            count += 1
    return total / count if count > 0 else 0

# 2. 文件处理
def count_lines(filename):
    try:
        with open(filename, 'r', encoding='utf-8') as file:
            count = 0
            for line in file:
                count += 1
        return count
    except FileNotFoundError:
        return 0

# 3. 用户输入验证
def get_valid_input():
    while True:
        try:
            number = int(input("请输入一个正整数: "))
            if number > 0:
                return number
            else:
                print("请输入正整数")
        except ValueError:
            print("请输入有效数字")

# 4. 游戏循环
def number_guessing_game():
    import random
    target = random.randint(1, 100)
    attempts = 0

    while attempts < 7:  # 最多7次机会
        guess = int(input("猜一个1-100的数字: "))
        attempts += 1

        if guess == target:
            print(f"恭喜!你用了{attempts}次猜对了!")
            return
        elif guess < target:
            print("太小了")
        else:
            print("太大了")

    print(f"游戏结束!答案是{target}")

# 5. 数据统计
def analyze_data(data):
    stats = {
        'count': 0,
        'sum': 0,
        'max': float('-inf'),
        'min': float('inf')
    }

    for value in data:
        stats['count'] += 1
        stats['sum'] += value
        stats['max'] = max(stats['max'], value)
        stats['min'] = min(stats['min'], value)

    stats['average'] = stats['sum'] / stats['count']
    return stats

问题77:如何避免常见的循环错误?

# 1. 避免在循环中修改列表
# 错误做法
numbers = [1, 2, 3, 4, 5]
for i in range(len(numbers)):
    if numbers[i] % 2 == 0:
        numbers.remove(numbers[i])  # 这会导致索引错误

# 正确做法1:倒序遍历
numbers = [1, 2, 3, 4, 5]
for i in range(len(numbers) - 1, -1, -1):
    if numbers[i] % 2 == 0:
        numbers.pop(i)

# 正确做法2:创建新列表
numbers = [1, 2, 3, 4, 5]
numbers = [x for x in numbers if x % 2 != 0]

# 2. 避免无限循环
# 错误做法
# count = 0
# while count < 5:
#     print(count)  # 忘记增加count,导致无限循环

# 正确做法
count = 0
while count < 5:
    print(count)
    count += 1

# 3. 避免在循环中重复计算
# 错误做法
data = [1, 2, 3, 4, 5]
for i in range(len(data)):  # 每次都计算len(data)
    print(data[i])

# 正确做法
data = [1, 2, 3, 4, 5]
length = len(data)  # 只计算一次
for i in range(length):
    print(data[i])

# 或者直接遍历
for item in data:
    print(item)

问题78:循环的最佳实践

# 1. 使用描述性的变量名
def calculate_total_price(items):
    total = 0
    for item in items:
        total += item['price'] * item['quantity']
    return total

# 2. 使用函数封装复杂循环逻辑
def find_duplicates(lst):
    seen = set()
    duplicates = set()

    for item in lst:
        if item in seen:
            duplicates.add(item)
        else:
            seen.add(item)

    return list(duplicates)

# 3. 使用生成器处理大数据
def read_large_file(filename):
    with open(filename, 'r') as file:
        for line in file:
            yield line.strip()

# 4. 使用适当的循环类型
# 当知道循环次数时使用for循环
for i in range(10):
    print(i)

# 当条件不确定时使用while循环
user_input = ""
while user_input.lower() != 'quit':
    user_input = input("输入'quit'退出: ")

# 5. 使用循环的else子句
def search_item(items, target):
    for i, item in enumerate(items):
        if item == target:
            return i
    else:
        return -1

# 6. 合理使用break和continue
def process_numbers(numbers):
    result = []
    for num in numbers:
        if num < 0:
            continue  # 跳过负数
        if num > 100:
            break    # 遇到大于100的数就停止
        result.append(num)
    return result

总结

循环是编程中的基础概念,要点包括: - for循环:适合已知循环次数或遍历序列 - while循环:适合条件不确定的循环 - break和continue:控制循环流程 - 嵌套循环:处理多维数据 - else子句:循环正常结束时的处理 - 性能优化:使用推导式、生成器等 - 最佳实践:避免常见错误,使用合适的循环类型