智泊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 n = 1 while n <= 10 : print (100 ) n += 1 while True : age = int (input ("请输入年龄:" )) if age > 18 : print ("你已经成年了" ) break else : print ("你还是未成年人" ) i, sum = 1 , 0 while i <= 100 : sum += i i += 1 print (sum ) i, sum = 1 , 1 while i <= 10 : sum *= i i += 1 print (sum ) i, sum = 1 , 0 while i <= 100 : if i % 6 == 0 : sum += i i += 1 print (sum ) 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 i = 1 while i <= 3 : j = 1 while j <= 5 : print ("*" , end="" ) j += 1 print () i += 1 i = 1 while i <= 5 : j = 1 while j <= i: print ("*" , end="" ) j += 1 print ("\n" ) i += 1 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 print (list (range (5 )))print (list (range (0 , 5 , 1 )))print (list (range (0 , 5 , 2 )))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)sum = 0 for i in range (1 , 101 ): sum += iprint (sum )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)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 n = 0 for i in range (1 , 101 ): if i % 6 == 0 : n += 1 print (n) n = 0 for i in range (1 , 101 ): if i % 2 == 0 : n += iprint (n) n = 0 for i in range (1 , 101 ): if i % 3 == 0 or i % 7 == 0 : n += iprint (n) n = 0 for i in range (1 , 101 ): if i % 3 == 0 and i % 7 == 0 : n += 1 print (n) n = 0 for i in range (1 , 101 ): if i % 2 == 0 : n += i else : n -= iprint (n) n = 0 for i in range (1 , 30 ): print (i) n += 2 **iprint (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 for i in range (1 , 4 ): for j in range (1 , 6 ): print ("*" , end="" ) print ()for i in range (1 , 6 ): for j in range (1 , i + 1 ): print ("*" , end="" ) print ()for i in range (1 , 10 ): for j in range (1 , i + 1 ): print (f"{i} *{j} ={i*j} " , end="\t" ) print ()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 for i in range (1 , 11 ): if i % 3 == 0 : print (f"-------------{i} ----------------" ) break n = int (input ("请输入一个数:" ))for i in range (2 , n): if n % i == 0 : print (f"{n} 不是素数" ) break else : print (f"{n} 是素数" )for i in range (1 , 11 ): if i % 3 == 0 : continue print (i)for i in range (1 , 11 ): if i % 3 == 0 : pass print (i) h = 100 n = int (input ("请输入要查询的第n次落地的n值:" ))for i in range (1 , n): h += 100 / (2 **i) * 2 print (f"第{n} 次落地所经历的高度为:{h} " )