这节课你要学会

1. 把一段代码打包成自己的本领(函数);2. 让本领更灵活(参数);3. 让本领给你带回结果(return)。这是最后一课新知识,学会它,你就集齐了。

自己的本领

你早就在用电脑自带的本领了:print 会打印,input 会提问,len 会数数。这些本领的正式名字叫函数。今天我们学自己造新本领。

为什么要自己造?想想 print:它内部也有好几行代码,但你永远不用重写——写一次,起个名字,以后喊名字就行。这就是函数的全部意义。

def cheer():
    print("加油!你可以的!")
    print("你能行的!")

cheer()
print("做题之前……")
cheer()
运行结果
加油!你可以的!
你能行的!
做题之前……
加油!你可以的!
你能行的!

def(读作"def",define 的缩写)意思是"定义一个新本领"。注意两件事:

是不是很像菜谱?def 就是把菜谱写进菜谱书,调用才是真的照着做一遍。

灵活点:参数

现在的 cheer() 有点死板,每次喊的话都一样。要是能把名字传给它,让它喊得更有针对性就好了。用参数——函数的"入口":

def cheer(name):
    print(f"{name},加油!你可以的!")

cheer("小明")
cheer("小红")
运行结果
小明,加油!你可以的!
小红,加油!你可以的!

name 就像一个预留的盒子:喊 cheer("小明") 时,"小明"被装进 name 盒子,函数里就能用它。同一个本领,传不同的东西,就有不同的效果——print 能打任何东西,就是这个道理。

参数可以有多个,用逗号隔开:

def greet(name, food):
    print(f"{name},听说你爱吃{food},我也是!")

greet("小雨", "冰淇淋")

带回结果:return

有的本领不光做事,还要带回一个结果。就像自动售货机:投币进去(参数),饮料出来(结果)。关键词是 return

def area(width, height):
    result = width * height
    return result   # 把算好的结果带出去

a = area(5, 3)    # 接住带回来的结果,装进盒子 a
print(f"面积是 {a}")
print(area(10, 4) + area(2, 2))   # 结果还能直接接着算!
运行结果
面积是 15
44

print 和 return 的区别(容易迷糊,分清楚就通了)

print:让结果"显示出来给人看",说完就没了。

return:把结果"交还给程序",程序可以拿它继续用。

就像考试:print 是把答案念出来给大家听;return 是把答案写在卷子上交上去,老师能在卷子上继续打分。需要"接着算"的,一定要 return。

动手试一试:造一个"自动评语机"

def comment(score):
    if score >= 90:
        return "学霸本霸!"
    elif score >= 60:
        return "不错不错,稳住!"
    else:
        return "没事,下次逆袭!"

name = input("你是谁?")
score = int(input("考了多少分?"))
print(f"{name},{comment(score)}")

函数里装着第四课的 if,返回一句话给 print 用。你看,函数不是新知识,它是把所有旧知识打包的方式。

大程序的秘密:函数拼装

为什么说学完函数就能"做大程序"了?因为大程序就是一堆小函数拼起来的:

def welcome():
    # 打印欢迎语
    ...

def ask_question():
    # 出一道题
    ...

def show_result():
    # 公布成绩
    ...

welcome()
ask_question()
ask_question()
show_result()

每个函数只做一小件事,主程序读起来像目录一样清楚。错了也好找——哪个环节出问题,就检查哪个函数。程序员管这个叫模块化:搭积木,而不是捏一整个泥团。

练习

基础任务:见面打招呼。写一个 greet(name) 函数,调用三次,跟三个朋友打招呼。

进阶任务:温度换算器。写一个 to_celsius(f) 函数,把华氏温度换算成摄氏温度(公式:减 32 再乘 5 除以 9),return 结果。测试:to_celsius(212) 应该约等于 100。

隐藏挑战:游戏战斗力计算器。写一个 power(level, equipment) 函数返回战斗力(公式自定,比如 level × 10 + equipment × 50)。然后建一个装 3 个玩家等级和装备数的列表,用 for 循环算出每个人的战斗力,宣布谁最强。(这是第 10 课结业项目要用的思路!)

接下来

全部核心零件集齐!下一课我们用海龟画图让代码变成看得见的画——用循环画出正方形、星星和彩色螺旋,你会尖叫的。