普贤教程 › 基础教程
循环语句
两种循环:while 按条件循环,for 遍历集合。没有 do-while,没有 for(;;) 三表达式形式。
while
px
var i = 0 while i < 3: print("第 " + str(i + 1) + " 次") i += 1
text
第 1 次 第 2 次 第 3 次
别忘了推进条件循环体里没有改变条件的变量,就会无限循环。写 while 时先写下"什么时候退出",再写循环体。
for 遍历列表
px
var langs = ["px", "go", "py"] for l in langs: print(l)
text
px go py
for 遍历字典
px
var scores = {"语文": 90, "数学": 95} for k in scores: print(k + "=" + str(scores[k]))
text
语文=90 数学=95
遍历字典拿到的是键。要同时要键和值,用 d.keys() + 下标取值;顺序不保证,需要稳定顺序时先 sorted(d.keys())。
range
px
for i in range(0, 3): print(str(i))
text
0 1 2
range(起点, 终点, 步长),终点不含。步长可以是 2、3、甚至负数:
px
for i in range(0, 10, 3): print(str(i)) for i in range(3, 0, -1): print("倒计时 " + str(i))
text
0 3 6 9 倒计时 3 倒计时 2 倒计时 1
break 与 continue
px
for i in range(0, 10): if i == 2: continue # 跳过本次 if i == 5: break # 结束整个循环 print(str(i))
text
0 1 3 4
break 只跳出最内层循环。嵌套时需要跳出多层,用一个标志位:
px
var found = false var grid = [[1, 2], [3, 4]] for row in grid: if found: break for cell in row: if cell == 3: found = true break print(str(found))
text
true常见模式
累加与统计
px
var xs = [4, 8, 15, 16, 23, 42] var sum = 0 var maxv = xs[0] for x in xs: sum += x if x > maxv: maxv = x print("和 " + str(sum)) print("最大 " + str(maxv))
text
和 108 最大 42
按行处理文本
px
var text = "alpha\nbeta\ngamma" for line in split(text, "\n"): if len(trim(line)) == 0: continue print("[" + trim(line) + "]")
text
[alpha] [beta] [gamma]
边遍历边收集
px
def filter_by(xs, pred_true_value): var out = [] for x in xs: if x == pred_true_value: out.append(x) return out print(str(filter_by([1, 2, 1, 3, 1], 1)))
text
[1, 1, 1]
带索引的遍历
px
var items = ["a", "b", "c"] var i = 0 while i < len(items): print(str(i) + " -> " + items[i]) i += 1
text
0 -> a 1 -> b 2 -> c
循环里的字符串拼接
px
var parts = [] for i in range(0, 5): parts.append("第" + str(i) + "项") print(join(", ", parts))
text
第0项, 第1项, 第2项, 第3项, 第4项
性能习惯循环里拼接上千段文本时,先 append 到列表再 join——比每次
+= 快一个量级。常见错误
| 写法 | 结果 |
|---|---|
for i in range(0, 3):(全角冒号) | E2001 语法错误 |
for (var i = 0; i < 3; i += 1) | 不支持 C 风格 for |
| 循环体内修改正在遍历的列表 | 下标错位,取值不符合预期 |