Python · Day 12

函数、循环与
列表处理

第十二天,我把函数和循环组合起来。函数不仅能处理一次输入,也可以按指定次数重复工作,或接收一个列表并逐项完成任务。

让函数重复输出

参数 message 接收要输出的文字,参数 times 接收重复次数。range(times) 产生循环需要的数字,number 在每轮循环中接收其中一个数字。

day12.py
def repeat_message(message, times):          # 定义重复输出函数
    for number in range(times):              # number依次得到0到times减1
        print(number + 1, message)                # 显示从1开始的编号和信息

repeat_message("坚持学习Python!", 5)          # 调用函数并重复5次

range(5) 产生 0、1、2、3、4;输出时使用 number + 1,所以终端显示的编号是 1~5。变量名 number 可以更换,但它在这里清楚表达了“当前循环编号”。

函数接收整个列表

调用函数时,外部的 study_tasks 把整个任务列表传给参数 tasks。随后 task 在循环中依次接收列表中的一项任务。

show_tasks.py
def show_tasks(tasks):                       # tasks接收任务列表
    print("任务列表:")                      # 输出列表标题
    for task in tasks:                       # task依次接收每项任务
        print("-", task)                      # 输出当前任务

study_tasks = ["复习英语", "练习数学", "学习Python"] # 创建任务列表
show_tasks(study_tasks)                        # 把列表传入函数

今天进一步理清了数据的传递:study_tasks 保存整个列表,tasks 在函数内部接住整个列表,task 则在每轮循环中接住当前的一项任务。

使用累计变量计算总分

最终练习把函数、列表、循环和 return 连在一起。total 从 0 开始保存累计结果,每轮循环把当前成绩加进去。

score_total.py
def calculate_total(scores):                  # scores接收成绩列表
    total = 0                                    # 累计总分从0开始
    for score in scores:                    # score依次接收每个成绩
        total = total + score                    # 把当前成绩加进总分
    return total                               # 全部累加后返回总分

student_scores = [80, 90, 70]                  # 创建成绩列表
result = calculate_total(student_scores)       # 接收函数返回的总分
print("总分是:", result)                     # 输出最终结果

total 的变化是 0 → 80 → 170 → 240,最终正确输出总分 240。

return 的缩进位置

return totalfor 对齐,因此它会等循环全部结束后再返回 240。如果把它缩进到循环内部,第一次加上 80 后函数就会被 return 立即终止,90 和 70 都不会再处理。

今天的小测

  • 累计变量 total 在还没有加任何成绩时应从 0 开始
  • 循环变量 score 会依次得到 80、90、70
  • return 放进循环内部时会在第一次循环后返回 80,并终止函数

今天真正弄懂了什么

  • 函数可以使用循环按指定次数重复工作
  • range(times) 会产生从 0 到 times - 1 的数字
  • 循环变量会在每轮循环中接收一个新值
  • 函数可以接收整个列表,并逐项处理列表内容
  • 累计变量可以保存循环过程中不断变化的结果
  • return 的缩进决定函数何时结束并送出结果
  • 以后学习新代码时,会使用行内注释帮助阅读每一行的作用

今天的关键不是记住某个变量名,而是看清每个变量在当时保存什么:参数接住传入的数据,循环变量接住当前一项,累计变量保存已经处理过的结果。