内容正文:
单元3 基本数据类型
任务3-2:计算“奋斗者”号下潜速度
【任务目标】
“奋斗者”号是我国自主研发的全海深载人潜水器。2023年3月11日,“探索一号”科考船携“奋斗者”号全海深载人潜水器抵达三亚,圆满完成国际首次环大洋洲载人深潜科考航次任务。该次航行历时157天,环大洋洲航行22000余海里。航次期间,科考队在西南太平洋克马德克海沟区域开展了国际首次大范围、系统性的载人深潜调查,并在人类历史上首次抵达东南印度洋蒂阿曼蒂那深渊和瓦莱比-热恩斯深渊底部开展实地观察和取样。
任务3-2:计算“奋斗者”号下潜速度
“奋斗者”号全海深载人潜水器这一科技创新成果全面体现了党的二十大报告精神:“加快实施创新驱动发展战略。坚持面向世界科技前沿、面向经济主战场、面向国家重大需求、面向人民生命健康,加快实现高水平科技自立自强。”
2020年11月10日,“奋斗者”号首次海试直接挑战万米并一举成功。“奋斗者”号当日4时50分开始下潜,到7时42分突破万米大关,用时2小时52分。
试着编写一个程序计算“奋斗者”号首次海试突破万米的平均下潜速度。程序运行结果如下。
“奋斗者”号首次海试突破万米的平均下潜速度: 0.9689922480620154 米/秒
【任务实施】
演示过程……
3.2 数字运算
本节主要内容:
数字运算
数字处理函数
3.2.1 数字运算
操作符 说明 举例
** 幂运算 2**3
~ 按位取反 ~5
- 负号 -5
*、%、/、// 乘法、求余数、真除法、floor除法 2*3、3%2、5/2、5//2
+、- 加法、减法 2+3、2-3
<<、>> 向左移位、向右移位 3<<2、12>>2
& 按位与 5&2
^ 按位异或 5^2
| 按位或 5|2
<、<=、>、>=、==、!= 小于、小于等于、大于、大于等于、相等、不等 2<3、2<=3、2>3、2>=3、2==3、2!=3
not 逻辑非 not True、not 2<3
and 逻辑与 x>5 and x<100
or 逻辑或 x<5 or x>100
1.计算的优先级
表3-1中操作符的运算优先级按从上到下的顺序依次降低。可以用括号(括号优先级最高)改变计算顺序
示例代码如下。
>>> 2+3*5
17
>>> (2+3)*5
25
2.计算中的自动数据类型转换
在运算过程中遇到不同类型的数字时,Python总是将简单的类型转换为复杂的类型,示例代码如下。
>>> 2+3.5,type(2+3.5)
(5.5, <class 'float'>)
>>> 2+3.5+(2+3j),type(2+3.5+(2+3j))
((7.5+3j), <class 'complex'>)
数字类型复杂度从低到高依次为:布尔型、整型、浮点数类型、复数类型。
3.求余数
“x % y”计算x除以y的余数,余数符号与y一致。
若存在一个操作数为浮点数,则结果为浮点数,否则为整数
示例代码如下。
>>> 5%2,5%-2,-5%2,-5%-2
(1, -1, 1, -1)
>>> 5%2.0,5%-2.0,-5%2.0,-5%-2.0
(1.0, -1.0, 1.0, -1.0)
4.真除法和floor除法
“/”运算称为真除法,这是为了与传统除法进行区分。
在Python 3.0之前的版本中,“/”运算在两个操作数都是整数时,计算结果只保留整数部分(称为截断除法);如果有一个操作数是浮点数,则计算结果为浮点数,保留小数部分。
自Python 3.0起,“/”运算结果为浮点数,保留小数部分。
>>> 4/2,5/2
(2.0, 2.5)
floor除法
“//”运算称为floor除法。
“x//y”运算的结果为不大于“x/y”结果的最大整数。
当两个操作数都是整型时,结果为整型,否则为浮点数类型
示例代码如下。
>>> 5//2,5//-2,-5//2,-5//-2 #操作数都是int类型,结果为int类型
(2, -3, -3, 2)
>>> 5//2.0,5//-2.0,-5//2.0,-5//-2.0#操作数中一个是float类型,结果为float类型
(2.0, -3.0, -3.0, 2.0)
5.位运算
位运算:~、&、^、|、<<、>>,按操作数的二进制位进行操作。
(1)按位取反“~”
操作数的二进制位中,1取反为0,0取反为1,符号位也取反。
>>> ~5 #5的8位二进制形式为00000101,按位取反为11111010,即-6
-6
>>> ~-5 #-5的8位二进制形式为11111011,按位取反为00000100,即4
4
在计算机内部,数的位数与计算机字长一致。这里为了方便,用8位进行说明。
计算机内部,数都使用补码进行表示。
正数的补码与原码一致。
例如,6的原码和补码均为00000110,-6的原码为10000110,补码为11111010。
(2)按位与“&”
将两个操作数按其相同位置的数执行“与”操作,两个位上都是1时,与的结果为1,否则为0,示例代码如下。
>>> 4 & 5 #4的二进制形式为00000100,5为00000101,所以结果为00000100
4
>>> -4 & 5 #-4的二进制形式为11111100,5为00000101,所以结果为00000100
4
(3)按位异或“^”
按位异或在相同位上的数相同时结果为0,否则为1
示例代码如下。
>>> 4 ^ 5
1
>>> -4 ^ 5
-7
(4)按位或“|”
按位或在相同位上的数有一个为1时结果为1,否则为0
示例代码如下。
>>> 4 | 5
5
>>> -4 | 5
-3
(5)向左移位“<<”
“x << y”表示将x按二进制形式向左移动y位,末尾补0,符号位保持不变
向左移动1位等同于乘以2
示例代码如下。
>>> 1<<2
4
>>> -1<<2
-4
(6)向右移位“>>”
“x >> y”表示将x按二进制形式向右移动y位,符号位保持不变
向右移动1位等同于除以2
示例代码如下。
>>> 8>>2
2
>>> -8>>2
-2
6.比较运算
比较运算的结果为布尔值(True或False)
示例代码如下。
>>> 2 > 3
False
>>> 2 < 3.0
True
Python允许将连续的多个比较运算符进行缩写。示例代码如下。
>>> a=1
>>> b=3
>>> c=5
>>> a < b < c #等价于a <b and b<c
True
>>> a == b < c #等价于a== b and b < c
False
>>> a < b > c #等价于a<b and b>c
False
7.逻辑运算
逻辑运算(也称布尔运算)指布尔值(True或False)执行not、and或or运算。
在判断True或False之外的数据是否为逻辑值时,Python将属于下列情况的值都视为False。
None。
各种数字类型的0,如0、0.0、(0+0j)等。
空的序列,如''、()、[]等。
空的映射,如{}。
如果自定义类包含__bool__()方法或__len__()方法,当类的实例对象的__bool__()方法返回False或__len__()方法返回0时,实例对象视为False。
上述情况之外的值则视为True。
(1)逻辑非not
not True为False,not False为True
示例代码如下。
>>> not True , not False
(False, True)
>>> not None , not 0 , not '' , not {}
(True, True, True, True)
(2)逻辑与and
“x and y”在两个操作数都为True时,结果才为True,否则为False。
当x为False时,“x and y”运算结果为False,Python不会再计算y
示例代码如下。
>>> True and True , True and False , False and True , False and False
(True, False, False, False)
(3)逻辑或or
“x or y”在两个操作数都为False时,结果才为False,否则为True
当x为True时,“x or y”运算结果为True,Python不会再计算y
示例代码如下。
>>> True or True , True or False , False or True , False or False
(True, True, True, False)
3.2.2 数字处理函数
1.内置的常用数学函数
下面通过交互模式的实际例子说明部分常用的内置数学函数。
2.math模块
Python在math模块中提供了常用的数学常量和函数,要使用这些函数需要先导入math模块
示例。
$$