1: 变量

在一个程序中,各类变量为不同的数据充当了储存位置的作用。他们是一种将信息命名并留作以后使用的方式。每一个变量都有一个名字;这里,我们将会使用一个名为myLuckyNumber 的示例变量。要使信息存入一个变量中,我们需要使用等号并以以下方式写入一个指令:
«变量名称» = «你想要储存的值»
(在我们的教程中,我们会使用书引号表明表达式中特别的部分)。例如,下面这行Python 指令
myLuckyNumber = 13
储存13这个值到 myLuckyNumber 这个变量中。之后,不论你在哪里再次写入变量名称 myLuckyNumber,Python都会取回(取出)相应储存的值。下面是一个怎样使用变量的实例。它有多行指令:Python 会先执行第一行,再执行第二行,并一直进行下去直到它到达最后一行。请按运行程序按钮,观察它的作用。

示例
变量应用示例

请有序的(依次)看一下这5行程序,以及他们与输出之间的对应关系。你可以看到,myLuckyNumber 为前两个print语句保留了值13,然后它的值变成了7。我们同样在上面介绍了加号(+)运算符,它可以将两个数值加在一起。类似的还有减号(-)、乘号(*)和除号(/)运算符。我们会在后面的课程中回到这些运算符上来(再次提到这些运算符。 你可以用纸和笔在表格中记录值的变化来模拟电脑的存储器。
下面是一个例子;要记住,* 符号在Python是乘法的意思。

目标: 确定在程序结束后所有变量的最终值

first = 2
second = 3
third = first * second
second = third - first
first = first + second + third
third = second * first
方法: 我们使用一张表格来记录变量变化的值。滚动到底部来查看答案。

语句 语句执行后的值
first second third
first = 2 2
second = 3 2 3
third = first * second 2 3 6
second = third - first 2 3 4 6
first = first + second + third 2 12 4 6
third = second * first 12 4 6 48

所以,程序结束后 first的值是12second的值是4third的值是48

在你理解和修改代码的时候,用纸和笔画一个这样的表格将会很有帮助。我们同样也有一个自动化的 Python3 visualization 工具来模拟依次执行这样的运行程序(请看在顶部菜单的链接)。下面是在可视化工具上运行统一程序的样子。请用前进>按钮或者按下你键盘上的方向键来前往下一步(或上一步)。请仔细观察当每一行运行时变量的变化。

下面是一个关于变量的简答练习

简答练习: 计算x的值
下面这些指令执行后,x的值是什么?

x = 10
x = x + x
x = x - 5
正确!

两个常见错误

如果你向Python请求一个还没有定义的变量,你就会收到一条错误信息。

示例: 一个未定义的变量

你可以看到,我们得到了一条 名称错误: 名称 ‘trouble’还没有被定义的错误信息。有些时候,你会因为简单的拼写错误而得到这样的错误信息:如果你定义了一个变量 address=32,接着尝试print(adress)同样的错误就会产生。另外一个造成此错误的(原因)则是因为是你不小心互换了等号的两边。

示例: 语法错误:无法赋值给文本值

第一行并没有错,但第二行却会导致产生一个错误:Python 会认为第二行的 4=x 是想尝试去改变4的值,但你只允许改变变量的值,在这里4并不是一个变量。尽管A=B和B=A 在数学中是同样的含义,在编程中却是完全不一样的。

练习

这是一个让你开始了解变量的 热身练习。

编程练习: 头、肩膀、膝盖和脚趾
编写一个代码段 (一个Python程序的一小部分)来计算一个派对上一共有多少个头、肩膀、膝盖以及脚趾。打分程序会自动为你定义一个变量people,这个变量等于派对上的总人数。你的代码必须定义四个变量,分别叫做headsshoulderskneestoes,他们分别等于派对上总的头、肩膀、膝盖和脚趾的数量。你的程序不需要打印任何输出。打分程序会在每次你的代码运行时,为变量people赋予一个新的随机值
如果你需要一个提示来开头,请点击这里

代码排序

下面是一种新的编程练习,你并不需要写任何代码。我们会给你提供一个正确的程序,但是问题是它的每一行顺序都被打乱了。你的任务是用拖拽的方式重新排列每一行的顺序使他们变成一个正确的程序。

综合练习: 速度计算器
你现在正在参加一个自行车比赛,你需要骑上一座小山并下来。打分程序会先帮你定义好4个变量: uphillDistancedownhillDistance分别是上坡和下坡的距离(km),uphillTimedownhillTime分别是你完成上坡和下坡所需要的时间(分钟)。编写一个程序来计算和打印出你整个比赛中的平均速度。
使用你的鼠标拖放代码行来重新排列它们。
如果你卡住了,请点击这里来查看提示
  • totalDistance = uphillDistance + downhillDistance
  • print(averageSpeed)
  • averageSpeed = totalDistance / totalTime
  • totalTime = uphillTime + downhillTime

变换程序

下面是这节课的最后一个练习

编程练习: 变换程序
编写一个程序来交换两个变量的值。 打分程序会为你自动定义变量xy,这两个变量都是数字值。你必须编写代码来交换他们的值。你的程序不需要打印任何输出。
最常见的解决方案是简短的,但可能很难找到。如果你想查看它,请点击每一个提示。
提示一
你不需要进行任何数学计算(+-*/)来解决此问题。你只需要使用变量和 =。如果你需要,你可以使用任何名字来定义新变量。
提示二
我们有两个目标:将y原来的值放入x中,然后将x原来的值放入y中。如果我们只需要完成第一个目标(换句话来说,如果我们只想把y的值放入x中),我们的程序只需要一行代码

x = y
我们怎样才能同时完成两个目标?
提示三
下面这个程序看上去似乎是正确的

x = y
y = x
但这里有一个问题。例如,让我们假设x等于10以及y等于99.如果我们运行上面的那两行程序,在第一行运行之后xy都会等于99。第二行不会有任何效果。你可以尝试将这个答案提交给打分软件来查看到底会发生什么。我们怎样才能在一些地方保存x原来的值,从而在之后将它放入code>y中?
提示四
你的第一行应该像这样xOriginal = x,来保存x原来的值,用以留在后面使用。接着你可以让x = y。最后,设定y等于x原来的值。
提示五
点击来阅读一页维基百科 关于交换的伪代码(另一编程语言)。这里是一个链接有关 第二种方法,它偷偷的使用了数学运算,但它只适用于数字(文字无法使用此方法)。

当你正确的完成了这个练习,你就已经做好了学习下一课的准备。请按下底部
下一个的按钮。