第八章:AI进阶之---循环语句(while循环与循环控制)二
本文介绍了Python中while循环和循环控制语句的应用。主要内容包括:1) 使用while循环实现1到100的累加和计算;2) 使用while循环计算5的阶乘;3) 实现一个简单的猜数字游戏,包含随机数生成、用户输入处理和循环控制;4) 增强版猜数字游戏增加了难度选择和重复游戏功能。文章通过具体示例代码详细讲解了while循环的基本语法、循环控制语句(break和continue)的使用方法,
课时 9:循环语句(while 循环与循环控制)
文章目录
四、实战练习
4.1 累加与累乘
现在,我们将通过两个实战练习来巩固 while 循环的使用。请打开 PyCharm,创建一个新的 Python 文件,命名为while_loop_practice.py
,然后按照以下练习进行操作。
练习 1:计算累加和
编写一个程序,使用 while 循环计算 1 到 100 的累加和。
要求:
-
使用 while 循环实现累加。
-
初始化累加变量为 0。
-
设置合适的循环条件和循环变量更新。
-
输出计算结果。
示例代码:
# 计算1到100的累加和
sum = 0
i = 1
while i <= 100:
sum += i
i += 1
print("1到100的累加和为:", sum)
预期输出:
1到100的累加和为:5050
实现思路:
-
初始化累加变量
sum
为 0,循环变量i
为 1。 -
当
i
小于等于 100 时,执行循环体。 -
在循环体中,将
i
加到sum
上。 -
每次循环后,将
i
增加 1,确保循环最终结束。 -
循环结束后,输出累加结果。
练习 2:计算阶乘(累乘)
编写一个程序,使用 while 循环计算 5 的阶乘(即 5! = 5×4×3×2×1)。
要求:
-
使用 while 循环实现累乘。
-
初始化累乘变量为 1。
-
设置合适的循环条件和循环变量更新。
-
输出计算结果。
示例代码:
# 计算5的阶乘
factorial = 1
n = 5
while n > 0:
factorial *= n
n -= 1
print("5的阶乘为:", factorial)
预期输出:
5的阶乘为:120
实现思路:
-
初始化累乘变量
factorial
为 1,因为任何数乘以 1 都等于它本身。 -
设置循环变量
n
为 5。 -
当
n
大于 0 时,执行循环体。 -
在循环体中,将
factorial
乘以n
。 -
每次循环后,将
n
减少 1,确保循环最终结束。 -
循环结束后,输出累乘结果。
4.2 猜数字游戏
现在,我们将编写一个经典的猜数字游戏,这个游戏将综合运用 while 循环、条件判断和循环控制语句。
练习 3:简单猜数字游戏
编写一个程序,实现以下功能:
-
程序生成一个 1 到 100 之间的随机整数。
-
用户有 5 次机会猜测这个数字。
-
每次猜测后,程序提示用户猜测的数字是太大、太小还是正确。
-
如果用户在 5 次内猜对,显示成功消息并结束游戏。
-
如果用户用完 5 次机会仍未猜对,显示正确答案并结束游戏。
要求:
-
使用 while 循环实现游戏主循环。
-
使用 random 模块生成随机数。
-
使用 break 语句在用户猜对时提前终止循环。
-
处理用户输入的非数字情况(可选)。
示例代码:
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次猜对了!
实现思路:
-
使用
random.randint(1, 100)
生成一个 1 到 100 之间的随机整数。 -
使用
attempts
变量记录用户的猜测次数,初始值为 0。 -
设置最大尝试次数
max_attempts
为 5。 -
使用 while 循环,当
attempts
小于max_attempts
时执行循环体。 -
在循环体中,获取用户输入的猜测数字。
-
比较猜测数字与秘密数字,给出相应提示。
-
如果猜测正确,使用 break 语句提前终止循环。
-
如果循环正常结束(即用户用完了所有尝试次数),通过 else 子句显示正确答案。
练习 4:增强版猜数字游戏(选做)
在简单猜数字游戏的基础上,添加以下功能:
-
游戏开始前,让用户选择游戏难度(简单、中等、困难)。
-
根据难度设置不同的最大尝试次数:
-
简单:10 次
-
中等:7 次
-
困难:5 次
-
游戏结束后,询问用户是否想再玩一次。
-
使用循环控制语句实现游戏的持续进行。
示例代码:
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次机会猜一个1到100之间的数字。
请输入你的猜测(1-100):50
猜大了!
请输入你的猜测(1-100):25
猜小了!
请输入你的猜测(1-100):37
猜小了!
请输入你的猜测(1-100):43
猜大了!
请输入你的猜测(1-100):40
恭喜你!你在第5次猜对了!
你想再玩一次吗?(是/否):是
请选择游戏难度(简单/中等/困难):困难
你选择了困难难度,你有5次机会猜一个1到100之间的数字。
请输入你的猜测(1-100):50
猜大了!
请输入你的猜测(1-100):25
猜小了!
请输入你的猜测(1-100):37
猜小了!
请输入你的猜测(1-100):43
猜大了!
请输入你的猜测(1-100):40
很遗憾,你用完了5次机会。正确答案是40。
你想再玩一次吗?(是/否):否
感谢游玩!
实现思路:
-
定义
play_game
函数,处理单次游戏流程。 -
在
play_game
函数中,根据用户选择的难度设置不同的最大尝试次数。 -
使用 while 循环实现游戏主循环,允许用户多次猜测。
-
使用
break
语句在用户选择不玩时终止游戏循环。 -
使用
return
语句在用户猜对时提前结束函数执行。
五、课程总结
今天的课程中,我们学习了 Python 中的 while 循环和循环控制语句,这些内容是编写高效、灵活代码的关键。
重点回顾:
- while 循环基础:
-
while 循环在条件为真时重复执行代码块。
-
语法格式:
while 条件表达式: 代码块
。 -
必须确保循环条件最终为假,否则会导致死循环。
- 循环控制语句:
-
break:提前终止整个循环。
-
continue:跳过当前迭代,继续下一次迭代。
-
else 子句:在循环正常结束时执行。
- 实战应用:
-
累加和累乘:使用 while 循环实现数值的累加和累乘。
-
猜数字游戏:综合运用 while 循环、条件判断和循环控制语句。
课后任务:
-
复习今天所学的内容,确保完全理解 while 循环和循环控制语句的使用。
-
完成课堂练习中的三个实战任务。
-
预习下一节课的内容:函数定义与调用。
下一节课中,我们将学习 Python 中的函数,它是组织和复用代码的重要工具。通过函数,我们可以将复杂的程序分解为更小的、可管理的部分,提高代码的可读性和可维护性。
如果你在学习过程中遇到任何问题,请随时提问。祝你学习愉快!
六、常见问题与解答
6.1 while 循环相关问题
问题 1:while 循环和 for 循环有什么区别?应该如何选择?
解答:while 循环和 for 循环的主要区别在于适用场景。for 循环适用于已知循环次数或遍历可迭代对象的场景,而 while 循环适用于不知道循环次数,但知道终止条件的场景。例如,遍历列表时使用 for 循环更合适,而实现用户登录验证时使用 while 循环更合适。
问题 2:如何避免 while 循环中的死循环?
解答:避免死循环的关键是确保循环条件最终会变为假。可以通过以下方法实现:
-
在循环体内更新循环变量,使其最终导致条件为假。
-
设置合理的终止条件。
-
在必要时使用 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 只影响当前层的循环。如果需要在多层循环中使用它们,可以考虑以下方法:
-
使用标志变量来控制外层循环。
-
将内层循环封装成函数,使用 return 语句提前返回。
-
使用异常处理机制(虽然不太推荐)。
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
# 其他代码...
七、课后练习
- 基础练习:
-
使用 while 循环计算 1 到 1000 的累加和。
-
使用 while 循环计算 7 的阶乘。
- 进阶练习:
-
编写一个程序,使用 while 循环和 continue 语句打印 1 到 20 之间的所有奇数。
-
编写一个程序,使用 while 循环和 break 语句查找列表中第一个大于 10 的元素。
- 挑战练习:
-
编写一个程序,实现简单的计算器功能,支持加、减、乘、除四种运算,用户可以连续进行计算,直到选择退出。
-
编写一个程序,实现简单的银行账户管理系统,支持存款、取款和查询余额操作,使用 while 循环实现菜单驱动界面。
通过这些练习,你将能够更好地掌握 Python 的 while 循环和循环控制语句,为后续的学习打下坚实的基础。如果你在练习过程中遇到任何问题,请随时提问。
更多推荐
所有评论(0)