课时 9:循环语句(while 循环与循环控制)

请添加图片描述
在这里插入图片描述



四、实战练习

4.1 累加与累乘

现在,我们将通过两个实战练习来巩固 while 循环的使用。请打开 PyCharm,创建一个新的 Python 文件,命名为while_loop_practice.py,然后按照以下练习进行操作。

练习 1:计算累加和

编写一个程序,使用 while 循环计算 1 到 100 的累加和。

要求

  1. 使用 while 循环实现累加。

  2. 初始化累加变量为 0。

  3. 设置合适的循环条件和循环变量更新。

  4. 输出计算结果。

示例代码

# 计算1到100的累加和
sum = 0
i = 1

while i <= 100:
    sum += i
    i += 1

print("1到100的累加和为:", sum)

预期输出

1到100的累加和为:5050

实现思路

  1. 初始化累加变量sum为 0,循环变量i为 1。

  2. i小于等于 100 时,执行循环体。

  3. 在循环体中,将i加到sum上。

  4. 每次循环后,将i增加 1,确保循环最终结束。

  5. 循环结束后,输出累加结果。

练习 2:计算阶乘(累乘)

编写一个程序,使用 while 循环计算 5 的阶乘(即 5! = 5×4×3×2×1)。

要求

  1. 使用 while 循环实现累乘。

  2. 初始化累乘变量为 1。

  3. 设置合适的循环条件和循环变量更新。

  4. 输出计算结果。

示例代码

# 计算5的阶乘
factorial = 1
n = 5

while n > 0:
    factorial *= n
    n -= 1

print("5的阶乘为:", factorial)

预期输出

5的阶乘为:120

实现思路

  1. 初始化累乘变量factorial为 1,因为任何数乘以 1 都等于它本身。

  2. 设置循环变量n为 5。

  3. n大于 0 时,执行循环体。

  4. 在循环体中,将factorial乘以n

  5. 每次循环后,将n减少 1,确保循环最终结束。

  6. 循环结束后,输出累乘结果。

4.2 猜数字游戏

现在,我们将编写一个经典的猜数字游戏,这个游戏将综合运用 while 循环、条件判断和循环控制语句。

练习 3:简单猜数字游戏

编写一个程序,实现以下功能:

  1. 程序生成一个 1 到 100 之间的随机整数。

  2. 用户有 5 次机会猜测这个数字。

  3. 每次猜测后,程序提示用户猜测的数字是太大、太小还是正确。

  4. 如果用户在 5 次内猜对,显示成功消息并结束游戏。

  5. 如果用户用完 5 次机会仍未猜对,显示正确答案并结束游戏。

要求

  1. 使用 while 循环实现游戏主循环。

  2. 使用 random 模块生成随机数。

  3. 使用 break 语句在用户猜对时提前终止循环。

  4. 处理用户输入的非数字情况(可选)。

示例代码

import random

# 生成1到100之间的随机数
secret_number = random.randint(1, 100)
attempts = 0
max_attempts = 5

print("欢迎来到猜数字游戏!你有5次机会猜一个1到100之间的数字。")

while attempts < max_attempts:
    guess = int(input("请输入你的猜测:"))
    attempts += 1

    if guess == secret_number:
        print(f"恭喜你!你在第{attempts}次猜对了!")
        break
    elif guess < secret_number:
        print("猜小了!")
    else:
        print("猜大了!")
else:
    print(f"很遗憾,你用完了所有机会。正确答案是{secret_number}。")

预期输出(假设秘密数字是 42):

欢迎来到猜数字游戏!你有5次机会猜一个1到100之间的数字。

请输入你的猜测:50

猜大了!

请输入你的猜测:30

猜小了!

请输入你的猜测:40

猜小了!

请输入你的猜测:45

猜大了!

请输入你的猜测:42

恭喜你!你在第5次猜对了!

实现思路

  1. 使用random.randint(1, 100)生成一个 1 到 100 之间的随机整数。

  2. 使用attempts变量记录用户的猜测次数,初始值为 0。

  3. 设置最大尝试次数max_attempts为 5。

  4. 使用 while 循环,当attempts小于max_attempts时执行循环体。

  5. 在循环体中,获取用户输入的猜测数字。

  6. 比较猜测数字与秘密数字,给出相应提示。

  7. 如果猜测正确,使用 break 语句提前终止循环。

  8. 如果循环正常结束(即用户用完了所有尝试次数),通过 else 子句显示正确答案。

练习 4:增强版猜数字游戏(选做)

在简单猜数字游戏的基础上,添加以下功能:

  1. 游戏开始前,让用户选择游戏难度(简单、中等、困难)。

  2. 根据难度设置不同的最大尝试次数:

  • 简单:10 次

  • 中等:7 次

  • 困难:5 次

  1. 游戏结束后,询问用户是否想再玩一次。

  2. 使用循环控制语句实现游戏的持续进行。

示例代码

import random

def play_game():
    # 选择游戏难度
    difficulty = input("请选择游戏难度(简单/中等/困难):")
    if difficulty == "简单":
        max_attempts = 10
    elif difficulty == "中等":
        max_attempts = 7
    else:
        max_attempts = 5

    # 生成随机数
    secret_number = random.randint(1, 100)
    attempts = 0

    print(f"你选择了{difficulty}难度,你有{max_attempts}次机会猜一个1到100之间的数字。")

    while attempts < max_attempts:
        guess = int(input("请输入你的猜测(1-100):"))
        attempts += 1

        if guess == secret_number:
            print(f"恭喜你!你在第{attempts}次猜对了!")
            return True  # 猜对后返回True
        elif guess < secret_number:
            print("猜小了!")
        else:
            print("猜大了!")
    
    # 如果循环结束仍未猜对
    print(f"很遗憾,你用完了{max_attempts}次机会。正确答案是{secret_number}。")
    return False  # 未猜对返回False

# 主循环,允许用户重复玩游戏
while True:
    play_game()
    play_again = input("你想再玩一次吗?(是/否):")
    if play_again.lower() != "是":
        print("感谢游玩!")
        break

预期输出

请选择游戏难度(简单/中等/困难):中等

你选择了中等难度,你有7次机会猜一个1100之间的数字。

请输入你的猜测(1-100):50

猜大了!

请输入你的猜测(1-100):25

猜小了!

请输入你的猜测(1-100):37

猜小了!

请输入你的猜测(1-100):43

猜大了!

请输入你的猜测(1-100):40

恭喜你!你在第5次猜对了!

你想再玩一次吗?(是/否):是

请选择游戏难度(简单/中等/困难):困难

你选择了困难难度,你有5次机会猜一个1100之间的数字。

请输入你的猜测(1-100):50

猜大了!

请输入你的猜测(1-100):25

猜小了!

请输入你的猜测(1-100):37

猜小了!

请输入你的猜测(1-100):43

猜大了!

请输入你的猜测(1-100):40

很遗憾,你用完了5次机会。正确答案是40。

你想再玩一次吗?(是/否):否

感谢游玩!

实现思路

  1. 定义play_game函数,处理单次游戏流程。

  2. play_game函数中,根据用户选择的难度设置不同的最大尝试次数。

  3. 使用 while 循环实现游戏主循环,允许用户多次猜测。

  4. 使用break语句在用户选择不玩时终止游戏循环。

  5. 使用return语句在用户猜对时提前结束函数执行。

五、课程总结

今天的课程中,我们学习了 Python 中的 while 循环和循环控制语句,这些内容是编写高效、灵活代码的关键。

重点回顾

  1. while 循环基础
  • while 循环在条件为真时重复执行代码块。

  • 语法格式:while 条件表达式: 代码块

  • 必须确保循环条件最终为假,否则会导致死循环。

  1. 循环控制语句
  • break:提前终止整个循环。

  • continue:跳过当前迭代,继续下一次迭代。

  • else 子句:在循环正常结束时执行。

  1. 实战应用
  • 累加和累乘:使用 while 循环实现数值的累加和累乘。

  • 猜数字游戏:综合运用 while 循环、条件判断和循环控制语句。

课后任务

  1. 复习今天所学的内容,确保完全理解 while 循环和循环控制语句的使用。

  2. 完成课堂练习中的三个实战任务。

  3. 预习下一节课的内容:函数定义与调用。

下一节课中,我们将学习 Python 中的函数,它是组织和复用代码的重要工具。通过函数,我们可以将复杂的程序分解为更小的、可管理的部分,提高代码的可读性和可维护性。

如果你在学习过程中遇到任何问题,请随时提问。祝你学习愉快!

六、常见问题与解答

6.1 while 循环相关问题

问题 1:while 循环和 for 循环有什么区别?应该如何选择?

解答:while 循环和 for 循环的主要区别在于适用场景。for 循环适用于已知循环次数或遍历可迭代对象的场景,而 while 循环适用于不知道循环次数,但知道终止条件的场景。例如,遍历列表时使用 for 循环更合适,而实现用户登录验证时使用 while 循环更合适。

问题 2:如何避免 while 循环中的死循环?

解答:避免死循环的关键是确保循环条件最终会变为假。可以通过以下方法实现:

  1. 在循环体内更新循环变量,使其最终导致条件为假。

  2. 设置合理的终止条件。

  3. 在必要时使用 break 语句强制终止循环。

问题 3:while 循环的 else 子句有什么作用?

解答:while 循环的 else 子句会在循环正常结束(即没有通过 break 终止)时执行。它通常用于处理循环未找到目标元素的情况,例如在搜索算法中。

6.2 循环控制语句相关问题

问题 1:break 和 continue 的区别是什么?

解答:break 语句用于提前终止整个循环,而 continue 语句用于跳过当前迭代,继续下一次迭代。break 会影响整个循环的执行,而 continue 只影响当前迭代。

问题 2:可以在同一个循环中同时使用 break 和 continue 吗?

解答:是的,可以在同一个循环中同时使用 break 和 continue。它们通常出现在不同的条件判断中,break 用于提前终止循环,continue 用于跳过特定情况。

问题 3:如何在嵌套循环中使用 break 和 continue?

解答:在嵌套循环中,break 和 continue 只影响当前层的循环。如果需要在多层循环中使用它们,可以考虑以下方法:

  1. 使用标志变量来控制外层循环。

  2. 将内层循环封装成函数,使用 return 语句提前返回。

  3. 使用异常处理机制(虽然不太推荐)。

6.3 实战应用问题

问题 1:如何使用 while 循环实现倒计时功能?

解答:可以使用 time 模块和 while 循环实现倒计时功能:

import time

countdown = 10
while countdown > 0:
    print(countdown)
    time.sleep(1)  # 暂停1秒
    countdown -= 1
print("时间到!")

问题 2:如何使用 while 循环实现简单的登录验证?

解答:可以使用 while 循环和 break 语句实现简单的登录验证:

attempts = 0
max_attempts = 3
password = "secret"

while attempts < max_attempts:
    user_password = input("请输入密码:")
    if user_password == password:
        print("登录成功!")
        break
    attempts += 1
else:
    print("登录失败,已达到最大尝试次数。")

问题 3:如何处理猜数字游戏中的非数字输入?

解答:可以使用 try-except 块处理非数字输入:

while attempts < max_attempts:
    guess = input("请输入你的猜测(1-100):")
    try:
        guess = int(guess)
    except ValueError:
        print("请输入有效的数字!")
        continue  # 跳过本次迭代,继续下一次猜测
    attempts += 1
    # 其他代码...

七、课后练习

  1. 基础练习
  • 使用 while 循环计算 1 到 1000 的累加和。

  • 使用 while 循环计算 7 的阶乘。

  1. 进阶练习
  • 编写一个程序,使用 while 循环和 continue 语句打印 1 到 20 之间的所有奇数。

  • 编写一个程序,使用 while 循环和 break 语句查找列表中第一个大于 10 的元素。

  1. 挑战练习
  • 编写一个程序,实现简单的计算器功能,支持加、减、乘、除四种运算,用户可以连续进行计算,直到选择退出。

  • 编写一个程序,实现简单的银行账户管理系统,支持存款、取款和查询余额操作,使用 while 循环实现菜单驱动界面。

通过这些练习,你将能够更好地掌握 Python 的 while 循环和循环控制语句,为后续的学习打下坚实的基础。如果你在练习过程中遇到任何问题,请随时提问。

在这里插入图片描述

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐