不知不觉,我们已经一起写了好几个程序了。在编写程序的时候,很抱歉有些东西我刻意隐瞒了,因此今天我要停下来,给你讲讲当年大明湖畔的夏… 呸,变量和函数!
我们知道温度的单位有摄氏度和华氏度,它们之间的关系是:
F = C × 1.8 + 32
其中,F 表示华氏温度,C 表示摄氏温度。
为了看起来舒服点,我们用 x 替换 C,用 y 替换 F。于是得到 y = 1.8x + 32
这样一个二元一次方程。
我们可以简写为函数关系式 y = f(x)
其中 x 是自变量,y 是因变量,此式表示 y 随 x 的变化而变化。而如何变化的秘密就藏在函数 f()
,在这里也就是 y = 1.8x + 32
的关系。
所以,我们可以把自变量看成 “原因”,因变量看成 “结果”,函数看成是它们之间的 “关系”。
以上是数学上关于变量和函数的概念,计算机编程中变量和函数的概念也类似,但多了一些扩展。
同样是函数表达式 y = f(x)
,自变量 x 在程序中称为 “输入”,因变量 y 在程序中称为 “输出”。函数 f()
是中间处理过程,我们可以把它当成黑箱子,对于函数的使用者来说,通常只关心 “输入什么,就会输出什么” 的问题。
在程序设计中,自变量 x 也被称为 “参数”,因变量 y 则被称为 “返回值”。因此你可能会听到这样的描述:传入了参数 x,调用了函数 f(),返回了结果 y。
我们用之前学的编程知识来实现摄氏温度和华氏温度的转换:
x = float(input("请输入摄氏温度值:"))
y = 1.8 * x + 32
print("对应的华氏温度值为:", y)
第一行中的 float() 函数表示将输入的数值转换为浮点数(也就是小数)。
接下来,我们用函数来实现:
def f(Ce):
F = 1.8 * Ce + 32
return F
x = float(input("请输入摄氏温度值:"))
y = f(x)
print("对应的华氏温度值为:", y)
前三行就是函数的实现,Python 中的函数使用 def 来标识(def 是 define 的缩写),这个函数的功能是接收一个参数 Ce,经过转换得到 F,并将 F 返回给使用者。
在看看倒数第二行,是不是很熟悉?这不就是前面的函数表达式 y = f(x)
吗?在程序中,我们称为函数的调用,函数内部转换后的 F 就会传递给变量 y。
当然,函数的名字不总是叫 f,我们通常会根据函数的功能取一个恰当的名字。比如这个温度转换函数可以取名为 temp_convert 或者 Ce2F。
还有点时间,再来讲一下 IPO 编程模型。IPO 模型是程序的基本编写方法,IPO 三个字母的含义如下:
I
:Input 输入,程序的输入。P
:Process 处理,程序的主要逻辑。O
:Output 输出,程序的输出。IPO 方法讲解的是,在编写程序的时候,我们要关注输入是什么,输出是什么,如何从输入达到输出。
有时候我们会把处理方法统称为算法,它是程序最重要的部分。算法是一个程序的灵魂。
一个程序可以有零个或多个输入,至少一个或多个输出。没有输出的程序是没有意义的。
进一步抽象,你会发现,这种 IPO 模型同样适用于我们人本身。每个人的人生都是 获取信息输入-大脑处理-总结输出 的一个过程。
比如当你面对考试时,考试成绩就是你的输出,平时的学习积累就是你的输入。比如对于现在的我来说,写东西就是最终的输出,输入就是我前面的经验和瞎想。
其实每件事都一样,最终的结果无外乎就是看 “有什么输入” 和 “怎样处理”。
如果你感觉迷茫,难以输出,也许是因为输入不够。这时候就要多读书多看报,少吃零食多睡觉!
Quality input ensures quality output
同时,我们人类的大脑处理方式有无数多种,每个人要理解这个世界,都需要自己找到底层的思维模型。通过建立思维模型,形成自己独特、高效的处理方法。
(1)自己动手用函数的方式实现摄氏度和华氏度的转换程序。
(2)找一找到目前为止我们一共用过多少个函数。
(3)理解 IPO 编程模型。