循环结构
对应教学日历:讲次 3-4
一、while 循环
while 条件表达式:
语句组注意事项
- 条件表达式可以是任意类型
- 循环体中语句组有可能一次也不执行
- 程序中需要包含使循环结束的语句
死循环
while True:
print("我喜欢Python") # 永远执行计算1-100之和
total = 0
t = 1
while t <= 100:
total = total + t
t = t + 1
print(total)二、for 循环
for 循环变量 in 对象:
语句块可以迭代的对象:字符串、列表、元组、字典、range()
计算1-100之和
total = 0
for t in range(1, 101):
total = total + t
print(total)range() 函数
range(start, end, step) # 半开区间,不包括end| 示例 | 结果 |
|---|---|
range(5) | 0, 1, 2, 3, 4 |
range(4, 10, 2) | 4, 6, 8 |
range(1, 101) | 1, 2, ..., 100 |
range(100, 1, -2) | 100, 98, ..., 2 |
三、循环中断语句
break
中断循环的执行,跳出循环体。
i = 0
while i <= 5:
i = i + 1
if i % 2 == 0:
break # i=2时跳出循环
print("我喜欢Python")
# 输出:我喜欢Python(只打印1次)continue
中断本次循环,进入下一次循环判断。
i = 0
while i <= 5:
i = i + 1
if i % 2 == 0:
continue # i为偶数时跳过print
print("我喜欢Python")
# 输出:我喜欢Python ×3(i=1,3,5时打印)四、九九乘法表
for i in range(1, 10):
for j in range(1, 10):
print("%d*%d=%2d" % (i, j, i * j), end=" ")
print()五、图形打印
菱形
# 上半部分
for i in range(1, 5):
print(" " * (4 - i), end="")
print("*" * (2 * i - 1))
# 下半部分
for i in range(1, 4):
print(" " * i, end="")
print("*" * (7 - 2 * i))字符菱形(输入行数)
fh = input("请输入一个字符:")
n = int(input("请输入上三角行数:"))
for i in range(n):
print(" " * (n - i - 1), end="")
print(fh * (2 * i + 1))
for i in range(n - 1):
print(" " * (i + 1), end="")
print(fh * (2 * (n - i - 1) - 1))奇数字母菱形
line = int(input("请输入行数:"))
while line % 2 == 0:
line = int(input("请输入奇数:"))
n = (line + 1) // 2
for i in range(n):
print(" " * (n - i - 1), end='')
print(chr(65 + i) * (2 * i + 1))
for i in range(n - 1):
print(" " * (i + 1), end='')
print(chr(65 + n - i - 2) * (2 * (n - i - 1) - 1))作业示例
百钱买百鸡
for x in range(21):
for y in range(34):
z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100:
print("%3d\t%3d\t%3d" % (x, y, z))要点:
- 穷举法:公鸡最多20只,母鸡最多33只
5*x + 3*y + z/3 == 100满足总价100文
好人好事问题(逻辑推理)
for p in "ABCD":
if (p != 'A') + (p == 'C') + (p == 'D') + (p != 'D') == 3:
print(p)要点:
- 利用布尔值为1/0的特性,4个条件中恰好3个为真
- 遍历4种可能,找到满足条件的答案
作业重点
while先判断后执行,for用于遍历序列range(start, end, step)半开区间,不包括endbreak终止整个循环,continue跳过本次循环- 九九乘法表:双重
for循环,内层range(1, 10) - 图形打印:用
" " * n控制缩进,"*" * n控制图形 - 穷举法:遍历所有可能,用条件筛选满足要求的解
chr(65)= ‘A’,chr(65+i)可生成连续字母