⚠️ 提示
文章发布较早,内容可能过时,阅读注意甄别。

第5课 去火星要多久——变量和表达式

5.1 问题描述

火星是太阳系行星之一,其地表被赤铁矿(氧化铁)覆盖,呈橘红色。与这颗红色星球有关的小说和科幻电影很多,这源自火星曾经被认为是太阳系中除地球以外最有可能存在生命的行星。很多人对火星之旅充满向往,但是你知道从地球到火星需要多少时间吗?

地球和火星的公转轨道都呈椭圆形,而且火星比地球更接近椭圆。两个行星在太阳周围的轨道上不断移动,它们之间的距离也是时刻变化的。从理论上说,地球和火星最近距离约为5500万km,最远距离超过4亿km。

要确定到达火星的具体时间,除了要考虑发射任务时两颗行星所处的轨道位置,还要考虑宇宙飞船的飞行速度,所以实际的计算丁作非常复杂,因此,我们以理想情况来计算从地球到火星需要的时间,将问题简化如下。

假设火星与地球的最近距离约为5500万km,宇宙飞船以每小时12000km的速度飞 行。宇宙飞船从地球轨道出发,需要经过多少天才能到达火星?

5.2 算法分析

经过简化,从地球到火星需要多少时间的问题就变成一个简单的行程问题,也就是在 已知路程和速度的条件下,求出时间。

根据速度v 、时间 t 和 路程 S 之间的关系,得出计算时间的公式为t = s/v Q 将地球到 火星的最近距离和宇宙飞船的飞行速度这两个已知数代入公式,就可以计算出从地球到 火星需要的飞行时间。

5.3 编程解题

在使用 Python 编程之前,让我们先看看使用数学方法是如何进行计算的。

由于需要知道到达火星的时间以天为单位,所以先将宇宙飞船的飞行速度 12000km/h 换算成 28.8万km/d,然后将两个已知数代入公式计算即可。计算过程如下:

$$ t = s / v = 5500/28.8 ≈ 191(天) $$

由此可知,从地球去火星,在两者距离最近的时候也需要大约半年。星际旅行真是漫 长啊!

接下来,将上述数学计算过程使用 Python 编程来体现。

在 IDLE 环境中,打开一个新的 Python 编辑器窗口,准备编写 Python 代码。

(1)使用字母表示已知数,即用 s 表示 5500 ,用 v 表示 28.8 。在 Python 编辑器中输入下面两行代码:

1s = 5500
2v = 28.8

在 Python 中,s 称为变量,s = 5500 称为赋值语句,等号(=)称为赋值操作符(或赋值运算符)。这行代码的作用就是将整数 5500 赋给变量 s,这样变量 s 就代表整数 5500 。同样地,变量 v 代表小数 28.8。

(2)使用公式计算从地球到火星需要的时间。在 Python 编辑器中输入下面一行代码。

1 t = s/v

在 Python 中,s/v 称为表达式。由于 s 和 v 这两个变量在之前已经分别被赋值为 5500 和 28.8,所以当程序执行到这行代码时,就会用具体的数值计算表达式s/v 的值,也就是用 5500 / 28.8 ,并将计算结果赋值给表示时间的变量t。

(3)对计算结果进行四舍五入。在 Python 编辑器中输入下面一行代码:

1t= round (t)

在 Python 中,round() 函数用于对小数进行四舍五入操作。这行代码的作用是,对变量 t 所表示的数值进行四舍五入之后重新赋值给变量 t 。

(4)将时间显示到屏幕。在Python编辑器中输入下面一行代码:

1print(t)

在 Python 中,print()函数用于向计算机屏幕输出内容。在第 3 课已经使用过这个函数向屏幕输出字符串hello, world和其他内容。

(5)至此,计算从地球到火星需要多少时间的程序编写完毕,见示例程序5-1

示例程序5-1
1s = 5500
2v = 28.8
3t = s/v
4t = round(t)
5print(t)

将这个程序的源代码以“去火星要多久.py”作为文件名保存到本地磁盘,然后选择 Rim一Run Module 菜单命令运行这个程序,执行结果如下:

1>>> 
2======================= RESTART: D:/phython/去火星要多久.py =======================
3191
4>>> 

小知识

2018 年 5 月 5 日,“洞察号”火星无人着陆探测器从地球出发,经过 4.83 亿km的星际飞行之后,于 11 月 26 日成功登陆火星,历时196天。

试一试

如果选择在地球与火星处于最远距离时飞向火星,需要多少夭才能到达?请你修改程序算一算。

5.4 变量和数据类型

  1. 通过赋值创建变量

在数学中,用字母表示数,可以把数或数量关系简单地表示出来。例如,在公式和方 程中使用字母表示数,能把解决方法从具体应用中抽象岀来,给运算带来方便。Python 编程继承了数学上的这种做法,使用变量来表示各种数据。例如:

1height= 100

这样就使用赋值操作创建了一个名为 height 的变量,它所表示的数据就是整数 100 ,也可以说变量 height 的值是 100 。等号(=)是赋值操作符,它的作用是将右边的数据赋给左边的变量。与在 Scratch 中使用 set... to... 积木为变量设定一个值作用相同。

在Python中还支持同时给多个变量赋值,例如:

1x, y= 50, 100

这样就创建变量 x ,其值为 50 ;同时创建了变量 y ,其值为 100 。很显然,这种方式能够减少代码行数,让代码更紧凑。

  1. 变量的命名规则

在 Python 语言中,规定变量名使用英文字母、数字和下划线来命名,并且不能以数字开头。还要注意,变量名是区分大小写的,不要使用 Python 关键字作为变量名。在给变
量命名时,通常会取一个有意义的名字,使其他人看到变量名就知道它的作用。如表1 所示,给出了一些正确和错误的变量名示例。

表1 变量命名示例
正确示例错误示例
my_namemy-name
MyNamemy.name
_name$name
ball_88-ball

在 Python Shell 窗口中,输入下面的指令可以查看 Python 语言的关键字:

1>>> help('keywords1')
  1. 基本数据类型

在Python语言中,支持使用以下儿种基本数据类型。

  • 整数类型(int):包括正整数、零和负整数。例如,100、0、-20。

  • 浮点数类型(float):也就是小数。例如,3.14、0.005、一1.345。

  • 字符串类型(str):指用单引号(,或双引号(”)括起来的任意文本。例如, 'hello'、” 唐诗三百首 ”、”010-123456789”。

  • 布尔类型(bool):指用True和False表示逻辑真和假的一种数据类型。 此外,还有列表(list)、元组(tuple).字典(diet)、集合(set)等高级数据类型,在后面课 程中会详细介绍。

  1. 变量的变与不变

在 Python 中,通过赋值操作创建变量,变量包括变量名和变量值两部分。变量在创建之后,变量名就固定下来,而变量值却是可以变化的。确切地说,是将变量名从一个数据指向另一个数据。也可以这样理解,变量名就像一个标签,可以贴到不同的数据上。换句话说,变量的数据类型是可以动态改变的。要想知道一个变量在某个时刻是哪种数据类型,可以使用 type() 函数进行查看。

在 Python Shell 窗口中,对变量的数据类型进行简单测试。首先输入下面的代码:

1>>> x = 10
2>>> x, type(x)
3(10, <class 'int'>)

这时变量 X 被创建,它的值为10,是整数类型(int)。接着输入下面的代码:

1>>> x = 9.8
2>>> x, type(x)
3(9.8, <class 'float'>)

这时变量 X 的值为 9.8,是浮点数类型(float)。继续输入下面的代码:

1>>> x = 'hello'
2>>> x, type(x)
3('hello', <class 'str'>)

这时变量X的值为 hell 、是字符串类型(str)o最后输入下面的代码:

1>>> x = True
2>>> x, type(x)
3(True, <class 'tool'〉)

这时变量X的值为True,是布尔类型(bool)。

5.5 表达式计算

表达式计算是编程语言的一个最基木功能。在Python中,表达式由操作数、运算符和括号等组成,它的书写方式、运算符、运算顺序等与数学中的基本一致。表达式计算之后得到的结果,需要赋值到变量中,以便在其他地方使用。

如图1 所示,执行这个语句时,先计算等号右边的表达式,再将计算结果赋给左边的变量 area。这样变量 area 就可以参与其他表达式的计算或者用于输出。

1

图1 计算表达式并给变量赋值

  1. 算术表达式的运算

算术表达式是通过算术运算符来运算的,又称为数值表达式。这里列举了 Python中 的算术运算符和使用示例,见表2 。

表2 Python中的算术运算符和使用示例
运算符描 述示例(a=12, b=10)
+加法运算a + b = 22
-减法运算a - b = 2
*乘法运算a * b = 120
/除法运算a / b = 1.2
%取模运算,返回除法的余数12 % 10 = 2
//整除运算,又称地板除12 // 10 = l
**幕运算,返回X的y次幕a ** 2 = 144

在前面的课程中介绍过加法(+)、减法(-)、乘法(*)和除法(/)运算符的使用,下面将讨论除法运算(/)和整除运算(//)的特性。

(1)在Python Shell窗口中进行除法(/)运算的测试,过程如下:

1>>> a = 1 / 4
2>>> type (a), a
3(< class 'float'>, 0.25)
4>>> a = 4 / 1
5>>> type (a), a
6(< class 'float'>, 4.0)

由此可见,在进行除法(/)运算时,无论是否整除返回的都是浮点数(float)。

(2)在Python Shell窗口中进行整除(//)运算的测试,过程如下:

 1>>> a = 5 // 2
 2>>> type (a), a
 3(< class 'int'>,2)
 4>>> a = 4 // 2
 5»> type (a), a
 6(< class 'int'>,2)
 7>>> a = 5 // 2.0
 8»> type (a), a
 9(< class 'float'>,2.0)
10>>> a = 4.0 // 2
11»> type (a), a
12(< class 'float'>, 2.0)

由此可见,进行整除(//)运算时,始终为向下取整,当参与运算的两个数都是整数时,返回的结果也是整数(int);当其中一个数是浮点数时,返回的结果就是浮点数(float)。

  1. 运算顺序

表3 从高到低列出了 Python 算术运算符的优先级。优先级高的运算符先进行运 算,相同优先级的运算符按从左到右的顺序进行运算。如果想改变运算顺序,可以使用小 括号。这些规则和数学上的规则是相同的。

表3 算术运算符的优先级

优先级运算符描 述
1**幕运算
2*、/、%、//乘法运算、除法运算、模运算和整除运算
3+、-加法运算和减法运算

(1)在 Python Shell 窗口中进行算术运算符优先级的测试,过程如下。

1>>> 2 * 3 ** 2 / 2 
29.0

由于蓦运算( ** )的优先级最高,所以先对 3**2 进行藉运算,再对乘法(* )和除法(/)
运算按从左到右的顺序进行运算。

(2)使用小括号改变运算顺序,测试过程如下:

1>>> (2 * 3) ** 2 / 2
218.0

由于对乘法( * )运算添加了小括号,使它的优先级变为最高,所以,先计算 2 * 3 ,再 进行幂运算,最后是除法(/)运算。

在数学上,要使用小括号()、中括号[]和大括号 { } 等不同类型的括号来调整表达式各组成部分的运算优先级;在 Python 语言中,只使用小括号()。

1提示:在实际编程中,如果构建了比较复杂的表达式,最好使用小括号标示出运算 优先级。这样能够提高代码的可读性,降低代码出错的概率,是一个良好的编程习惯。
  1. 增强型赋值运算符

在 Python 语言中,将加法运算符( + )和赋值运算符( = )组合在一起就构成了加法赋值运算符(+ =)。输入下面代码进行测试:

1>>> a = 1
2>>> a = a + 1
3>>> a
42
5>>> a + = 1
6>>> a
73

由上可知,赋值语句 a = a + 1 和 a += 1是等价的,只是后者更简捷。

此外,还有减法赋值运算符( -= )、乘法赋值运算符( *= )、除法赋值运算符( /= 和//=)等增强型赋值运算符,可以将它们看作是一种简便的写法即可。需要注意的是,在增强型赋值运算符中不能有空格。例如,加法赋值运算符是( + = ),不能写成(+ =),否则会出现语法错误。例如:

1>>> a = 1
2>>> a + = 1
3SyntaxError: invalid syntax
  1. 字符串的加法和乘法

在Python语言中,如果对两个字符串进行加法操作,结果就是使两个字符串连接成 一个新的字符串。输入下面代码进行测试。

1>>> 'hello' + 'world'
2'helloworld'
3>>> a = 'hello' 
4>>> b = 'world'
5>>> a + b
6'helloworld'

如果将一个字符串乘一个整数,结果就是对这个字符串进行复制操作。输入下面代 码进行测试。

1>>>	'a'* 3
2'aaa'
3>>> 3 * 'a'
4'aaa'
微信支付 支付宝