智泊Python--Day4

智泊Python–Day4

  Day4 是循环专题,配合 Day3 的条件判断,程序终于能「重复干活」了。先掌握 while(适合未知次数 / 死循环)和 for(适合已知次数、遍历容器),再理解 range() 这个生成整数序列的利器,最后用 break / continue / pass 精确控制循环流程。这一天的练习量很大,建议每个图案(99 乘法表、等腰三角形)都手动推演一遍缩进。

 

1.while 循环结构

  while 条件: 在条件为 True 时反复执行。三个要素:起始值、循环条件、循环变量更新(否则会成死循环)。while True: 配合 break 是写「持续交互直到满足条件」的常用套路(比如反复输入年龄直到成年)。下面几个例子覆盖了求和、阶乘、以及「满足某条件的累计」。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# 循环打印 10 次 100
n = 1
while n <= 10:
print(100)
n += 1

# 死循环 + break:不断输入年龄,大于18才退出
while True:
age = int(input("请输入年龄:"))
if age > 18:
print("你已经成年了")
break
else:
print("你还是未成年人")

# 1+2+...+100
i, sum = 1, 0
while i <= 100:
sum += i
i += 1
print(sum)

# 10 的阶乘
i, sum = 1, 1
while i <= 10:
sum *= i
i += 1
print(sum)

# 1~100 中能被 6 整除的数之和
i, sum = 1, 0
while i <= 100:
if i % 6 == 0:
sum += i
i += 1
print(sum)

# 1~100 之间奇数的个数
i, sum = 1, 0
while i <= 100:
if i % 2 == 1:
sum += 1
i += 1
print(sum)

 

2.while 循环嵌套

  外层循环控制「行」,内层循环控制「每行的内容」——打印矩形、三角形、等腰三角形都靠这个套路。内层循环每跑完一轮,外层用 print()(不带 end)换行;等腰三角形还要在每行前面补空格 " "*(行数-i)、主体用 "*"*(2*i-1)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# 3 行 5 列的 *
i = 1
while i <= 3:
j = 1
while j <= 5:
print("*", end="")
j += 1
print()
i += 1

# 逐行增多的 *(1~5 个)
i = 1
while i <= 5:
j = 1
while j <= i:
print("*", end="")
j += 1
print("\n")
i += 1

# 等腰三角形(5 行)
i, j = 1, 1
while i <= 5:
while j <= i:
print(" " * (6 - i), end="")
print("*" * (2 * i - 1), end="")
print("\n")
j += 1
i += 1

 

3.range 获取整数范围

  range(start, stop, step) 生成一个整数序列,规则是左闭右开 [start, stop):start 默认 0、step 默认 1。它是 for 循环的最佳拍档。step 传负数即可逆序生成。

1
2
3
4
5
6
7
8
9
# 打印 0~4
print(list(range(5)))
print(list(range(0, 5, 1)))

# 0~4 的偶数(步长 2)
print(list(range(0, 5, 2)))

# 逆序 4~0
print(list(range(5, 0, -1)))

 

4.for 循环

  for 适合已知次数或遍历容器。遍历列表有两种姿势:用 range(len(序列)) 拿到索引再取下标,或直接 for x in 序列 拿到元素;enumerate() 则同时给你「索引 + 元素」,最方便。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# 已知次数
for i in range(1, 6):
print(i)

# 1~100 求和
sum = 0
for i in range(1, 101):
sum += i
print(sum)

# 1~10 中能被 3 整除的数
for i in range(1, 11):
if i % 3 == 0:
print(i)

# 和列表结合:用索引
nums = [11, 22, 33]
for i in range(len(nums)):
print(nums[i])

# 直接遍历元素
for i in nums:
print(i)

# enumerate():同时拿索引和元素
for i, n in enumerate(nums):
print(i, n)

 

5.循环与条件综合练习

  把 for + if 组合,能做各种「计数 / 求和 / 筛选」。关键在 if 里的条件怎么写:% 6 == 0 筛整除、or / and 组合多个条件、奇偶用 % 2 区分。最后「彩礼题」是等比数列求和——每天给的分数是前一天的两倍(2**i)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 1~100 能被 6 整除的数的个数
n = 0
for i in range(1, 101):
if i % 6 == 0:
n += 1
print(n)

# 1~100 所有偶数的和
n = 0
for i in range(1, 101):
if i % 2 == 0:
n += i
print(n)

# 1~100 能被 3 或 7 整除的数的和
n = 0
for i in range(1, 101):
if i % 3 == 0 or i % 7 == 0:
n += i
print(n)

# 1~100 能被 3 和 7 同时整除的数的个数
n = 0
for i in range(1, 101):
if i % 3 == 0 and i % 7 == 0:
n += 1
print(n)

# 交错求和:1-2+3-4+...+99-100
n = 0
for i in range(1, 101):
if i % 2 == 0:
n += i
else:
n -= i
print(n)

# 彩礼题:分 30 期,第 i 天给 2**i 分钱
n = 0
for i in range(1, 30):
print(i)
n += 2**i
print(n)

 

6.嵌套循环图案

  用 for 写嵌套比 while 更干净。矩形、等差三角、99 乘法表、等腰三角形都复用「外层管行、内层管列」的模式。99 乘法表用 f"{i}*{j}={i*j}" 配合 \t 制表符对齐;等腰三角形靠「前导空格 + 星号」两串字符串拼接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 3 行 5 列的 *
for i in range(1, 4):
for j in range(1, 6):
print("*", end="")
print()

# 等差 *(1~5 个)
for i in range(1, 6):
for j in range(1, i + 1):
print("*", end="")
print()

# 99 乘法表
for i in range(1, 10):
for j in range(1, i + 1):
print(f"{i}*{j}={i*j}", end="\t")
print()

# 等腰三角形(5 行)
for i in range(1, 6):
for _ in range(1):
print(" " * (6 - i) + "*" * (2 * i - 1))

 

7.break / continue / pass

  三个流程控制关键字:break 跳出当前层循环(只跳一层);continue 跳过本轮剩余语句、直接进入下一轮;pass 是空语句占位(语法上需要一句但暂时不想写逻辑时用,防止报错)。for-else / while-else 很特别:正常循环结束才执行 else,一旦 break 跳出则 else 不执行——常用来写「找遍了都没找到」的逻辑(如下面的素数判断)。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# break:找到 1~10 第一个能被 3 整除的数就停
for i in range(1, 11):
if i % 3 == 0:
print(f"-------------{i}----------------")
break

# for-else:判断 n 是否为素数(只能被 1 和自身整除)
n = int(input("请输入一个数:"))
for i in range(2, n):
if n % i == 0:
print(f"{n}不是素数")
break
else:
print(f"{n}是素数")
# else 在 for 正常结束后才执行;break 跳出则 else 不执行

# continue:跳过本轮,只打印不能被 3 整除的数
for i in range(1, 11):
if i % 3 == 0:
continue
print(i)

# pass:占位,不报错
for i in range(1, 11):
if i % 3 == 0:
pass
print(i)

# 弹球落地:从 100 米落下,每次反弹一半,求第 n 次落地经历的总高度
h = 100
n = int(input("请输入要查询的第n次落地的n值:"))
for i in range(1, n):
h += 100 / (2**i) * 2
print(f"第{n}次落地所经历的高度为:{h}")

智泊Python--Day4
https://one-null-pointer.github.io/2026/07/23/智泊Python--Day4/
Author
liaoyue
Posted on
July 23, 2026
传送口