while循环
学习如何使用while循环在条件满足时重复执行代码块,实现更灵活的循环控制。
基本用法
while循环会在条件满足时重复执行代码块,直到条件变为假。
基本语法:
代码块
当条件表达式为真(True)时,执行缩进的代码块;然后再次检查条件,直到条件为假(False)时,退出循环。
示例:
i = 1
while i <= 5:
print(i)
i += 1 # 不要忘记增加计数器,否则会陷入无限循环
运行上面的代码,输出结果为:
1
2
3
4
5
无限循环与break语句
如果while循环的条件始终为真,那么循环将无限执行下去,这称为无限循环。我们可以使用break语句来退出循环。
示例:使用break退出循环
while True:
user_input = input("请输入内容 (输入'q'退出): ")
if user_input == 'q':
break
print(f"你输入的是: {user_input}")
运行上面的代码,程序会一直要求用户输入内容,直到用户输入'q'为止。
continue语句
continue语句用于跳过当前循环的剩余部分,直接开始下一次循环。
示例:
i = 0
while i < 10:
i += 1
if i % 2 == 0: # 如果是偶数,跳过
continue
print(i)
运行上面的代码,输出结果为:
1
3
5
7
9
嵌套while循环
在while循环内部可以再次使用while循环,这称为嵌套while循环。
示例:打印矩形
row = 0
while row < 3:
col = 0
while col < 5:
print("*", end="")
col += 1
print() # 换行
row += 1
运行上面的代码,输出结果为:
*****
*****
*****
故事化案例:小明的存钱计划
小明想要存够1000元买一辆新自行车,他每个月可以存100元。让我们计算他需要多少个月才能存够钱。
场景:小明的存钱计划
- 目标金额:1000元
- 每月存款:100元
- 初始存款:0元
代码实现:
target = 1000 # 目标金额
monthly_saving = 100 # 每月存款
current_saving = 0 # 当前存款
months = 0 # 月数
while current_saving < target:
current_saving += monthly_saving
months += 1
print(f"第{months}个月,存款金额: {current_saving}元")
print(f"小明需要{months}个月才能存够{target}元")
运行上面的代码,输出结果为:
第1个月,存款金额: 100元
第2个月,存款金额: 200元
第3个月,存款金额: 300元
第4个月,存款金额: 400元
第5个月,存款金额: 500元
第6个月,存款金额: 600元
第7个月,存款金额: 700元
第8个月,存款金额: 800元
第9个月,存款金额: 900元
第10个月,存款金额: 1000元
小明需要10个月才能存够1000元
练习题
1 猜数字游戏
编写一个猜数字游戏,程序随机生成一个1到100之间的数字,用户输入猜测的数字,程序提示"猜大了"或"猜小了",直到猜对为止。
import random
secret_number = random.randint(1, 100)
guess = None
attempts = 0
print("欢迎来到猜数字游戏!我想了一个1到100之间的数字。")
while guess != secret_number:
guess = int(input("请输入你的猜测: "))
attempts += 1
if guess < secret_number:
print("猜小了!再试一次。")
elif guess > secret_number:
print("猜大了!再试一次。")
else:
print(f"恭喜你!猜对了!答案是{secret_number}。你用了{attempts}次尝试。")
2 计算阶乘
编写一个程序,计算n的阶乘(n!),其中n由用户输入。
n = int(input("请输入一个正整数: "))
factorial = 1
i = 1
while i <= n:
factorial *= i
i += 1
print(f"{n}的阶乘是{factorial}")
3 打印斐波那契数列
编写一个程序,打印斐波那契数列的前n项,其中n由用户输入。
n = int(input("请输入要打印的项数: "))
if n <= 0:
print("请输入一个正整数")
elif n == 1:
print("斐波那契数列的前1项: 0")
elif n == 2:
print("斐波那契数列的前2项: 0, 1")
else:
print("斐波那契数列的前{n}项: 0, 1", end=", ")
a, b = 0, 1
i = 3
while i <= n:
c = a + b
if i == n:
print(c)
else:
print(c, end=", ")
a, b = b, c
i += 1