第3单元 奇妙的数字 035 第3 单元 奇妙的数字 “小萌,你还记得天宫课堂吗?” “对,之所以能天宫授课,都是因为航天技术的发展。航 天技术是计算机在科学计算方面的重要应用,因为计算机诞生 之初就是为了科学计算。你知道科学计算的基本处理对象是什 么吗?” “回答正确,现在就让我们一起来认识编程中奇妙的数 字吧!” “当然记得,我亲眼看到了王亚平阿姨演示太空中失重环 境下的好多现象,太神奇了!” “嗯,计算嘛,肯定是处理数字啰!” 数字是数学运算和推理表示的基础,数字类型是Python 的基础数据类型 之一。这里,我们先来认识Python 中整数、浮点数、真假值和空值这几种基 本数字类型的表示方式,并学会对它们进行基本的算术运算,迈出科学计算的 第一步。 3.1 整 数 “小帅,你几岁了?” “我8 岁。” Gwxzw.indd 35 2023/2/10 9:43:11 整数(integer)用来表示整数数值,即没有小数部分的数值。整数对于计 数和基本的数学运算来说很有用,比如小帅今年8岁,这个年龄值就是一个整 数。再比如,我们从小练习数数,从1数到100,这些也都是整数。在Python 语言中,整数类型为int,包括正整数、负整数和0,而且它的位数是任意的。 如果要指定一个非常大的整数,只需要写出其所有位数即可。 在Python中,整数都是int(integer)对象的实例,其字面值以十进制 (decimal)为主,特定情况下可以使用二进制(binary)、八进制(octal)或 十六进制(hexadecimal)表示。 十进制整数 1. 十进制整数的表现形式大家都很熟悉。例如,下面的数值和算式都是有 效的。 >>>1949 1949 >>>-2022 -2022 >>>0 0 >>>8888888888888888888888888888888888888888888888888888888888 888888888888888888888888888888888888888 8888888888888888888888888888888888888888888888888888888888888 888888888888888888888888888888888888 注意:不能以0作为十进制整数的开头(0除外)。 二进制整数 2. 由0和1两个数组成,进位规则是“逢二进一”,并且以0b/0B开头,例 如0b101(转换为十进制整数为5)或0B1111(转换为十进制整数为15)。 >>>0b101 5 >>>0b1111 15 八进制整数 3. 由0~7组成,进位规则为“逢八进一”,并且以0o/0O开头,例如0o20(转 换为十进制整数为16)或0O37(转换为十进制整数为31)。 >>>0O20 16 >>>0O37 31 十六进制整数 4. 由0~9、A~F(a~f)组成,进位规则为“逢十六进一” ,并且以 0x/0X开头,例如0xf(转换为十进制整数为15)或0X3a(转换为十进制整数 为58)。 >>>0xf 15 >>>0X3a 58 十进制整数 5. 可以通过内置函数与其他进制进行转换,相关函数如表3-1所示。 表3-1 进制转换内置函数 内 置 函 数 说 明 bin(int) 将十进制数值转换成二进制表示形式,转换的结果以0b为前缀 内 置 函 数 说 明 oct(int) 将十进制数值转换成八进制表示形式,转换的结果以0o为前缀 hex(int) 将十进制数值转换成十六进制表示形式,转换的结果以0x为前缀 int(s,base) 将字符串s依据base参数提供的进制数转换成十进制数 “小萌,你知道著名的‘五四运动’发生在哪一年吗?” “我知道,是1919年。” “太棒了,那我们一起用内置函数来看看1919的各种进制 对应的数值吧。” 一 想 想 【问题3-1】 以下代码的输出结果是什么? print("类型:",type(1919)) print("二进制:",bin(1919)) print("八进制:",oct(1919)) print("十六进制:",hex(1919)) 【问题3-2】 为什么下面所列举的整数是不合法的? 0456 0b123 0o789 0X5G 续表 一一 练练 练练 【问题3-3】 关于Python中整数的表示形式,错误 33 的是( )。 A. 1919 B. 0B123 C. 0o456 D. 0x789 3.2 浮 点 数 “你们听说过祖率吗?” “老师,我知道!我知道祖率就是圆周率π,3.1415926。” “对,祖冲之对圆周率数值的精确推算值,对于中国乃至 世界是一个重大贡献,所以后人用他的名字命名圆周率,简称 ‘祖率’。” 小知识:南北朝时,祖冲之算出的圆周率的近似值在3.1415926 和3.1415927之间,他的圆周率精确值在当时世界遥遥领先,直到 1000年后阿拉伯数学家阿尔卡西才超过他。 像3.1415926这样由整数部分和小数部分组成的数就是浮点数。在 Python语言中,浮点数类型为float,例如1.414、0.5、–1.732等。 浮点数可以使用E记法(也叫科学计数法)表示,用于表示特别大和特别 小的数。E的意思是指数,也可以写作e,其指底数为10,E(e)后边的数字 就是10的多少次幂。例如,地球到火星的距离平均大约为2.25亿千米,等于 2.25×100000000,也就是2.25×108,E记法写作2.25e8。如果给Python提 供一些极端的数据,那么它会自动采用E记法来表示,例如,0.0000000000789 会被记作7.89e–11。 >>>2.25e8 225000000.0 >>>0.0000000000789 7.89e-11 注意:(1)浮点数的整数或小数部分为0时,书写时可以省略0,但 不能同时省略(1.和.1都是合理的浮点数常量)。 (2)在E记法中,要求 e(或 E)之前必须有数,之后的指数必须为 整数。 一 想 想 【问题3-4】 下面所列举的浮点数的E记法为什么是不合法 333 的? 1.56E2.3 e5 3.5e-4.5 一一 练练 练练 【问题3-5】 关于Python中浮点数的表示,错误的 333 是( )。 A. 8. B. –.45 C. 2.7E3.4 D. .67e–2 3.3 真值和假值 “小萌,小帅,你们看过中央电视台财经频道的‘是真的吗’ 这个电视节目吗?” “我看过,那是一个互动求证节目,每周六晚上18:30播出, 特别有意思。” “对,随着微博、博客、社交网站、即时通信、视频分享 等传播渠道的发展,信息传播便捷自由,对于公众而言,面对 各类传言,真假莫辨,不堪其扰。这个节目携手电视观众与广 大网友,通过各大新媒体共同互动求真,对网络流言进行专业 验证与权威实验,探求真相。建议你们多看看,培养求真务实 的科学精神。” 一个句子所描述的东西有对有错,而关于一个句子所描述的东西的对错状 况称为真假值。例如,“太阳会发光”的说法是对的,其值为真。而“太阳不 会发光”的说法是错的,其值为假。 Python提供了 bool 类型来表示真(对)或假(错)。比如,非零数字在程 序世界里视为真(对),Python使用 True 来代表;而数字零(0或0.0)在程 序世界里视为假(错),Python使用 False 来代表。 在Python中,所有对象都可以进行真值测试。如果不确定一个对象的真假, 可以用内置函数bool( )来判断。 >>>bool(0) False >>>bool(0.0) False >>>bool(3.14) True >>>bool(1949) True >>>bool(0b101) True 值得一提的是,布尔类型可以当作整数来对待,即 True 相当于整数值 1, False 相当于整数值 0。因此,下面这些运算都是可以的: >>>False+1 1 >>>True+1 2 注意:True 和 False 是 Python 中的关键字。当作为 Python 代码输入 时,一定要注意字母的大小写,否则解释器会报错。 在Python中,所有的对象都可以进行真假值的测试,包括字符串、元组、 列表、字典、对象等。由于目前尚未学习,因此这里不做过多讲述,后续遇到 时会做详细的介绍。 3.4 空 值 在Python中,有一个特殊的常量None(N必须大写)。和False不同, 它不表示 0,也不表示空字符串,而表示没有值,也就是空值。 None 有自己的数据类型,可以在IDLE中使用内置函数type( )查看它的 类型,执行代码如下: >>>type(None) <class 'NoneType'> 可以看到,它属于 NoneType 类型。 需要注意的是,None 是 NoneType 数据类型的唯一值,也就是说,我们 不能再创建其他 NoneType 类型的变量,但是可以将 None 赋值给任何变量。 None 常用于 assert、判断以及函数无返回值的情况。 3.5 认识表达式 程序语言最大的作用就是将数据经过处理、运算后,转换成有用的信息供 我们使用。Python程序语言有不同种类的运算符,可以和操作数一起组成表达 式,然后进行运算。表达式由操作数(operand)与运算符(operator)组成, 具体说明如下。 操作数:包括变量、数值和字符。 运算符:包括算术运算符、赋值运算符、逻辑运算符和比较运算符等。 在Python中,根据参与运算的操作数的个数将运算符分为单目运算符和 双目运算符,本节先介绍算术运算符及算术表达式。 算术运算符是处理类似四则运算的符号,在数字的处理中用得最多。常用 的算术运算符如表3-2所示。 表3-2 常用的算术运算符 运算符 含 义 实 例 结 果 + 加 12.5+15 27.5 – 减 4.56–1.36 3.20 * 乘 5*3.6 18.0 / 除 7/2 3.5 % 求余,即返回除法的余数 7%2 1 // 整除,即返回商的整数部分 7//2 3 ** 幂,即返回x的y次方 2**3 8,即23 注意:使用除法(/或//)运算符和求余运算符时,除数不能为0, 否则将会出现异常,如图3-1所示。 图3-1 除数为0时出现的错误提示 由算术运算符将运算对象连接而成的表达式就是算术表达式。Python提 供的算术运算符,其运算法则与数学中的运算法则相同:先乘除后加减,有括 号者优先。 “在进行算术运算时,若参与运算的操作数类型不同,则会发生隐式 类型的转换。” 隐式类型转换方式如表3-3所示。 表3-3 隐式类型转换方式 操作数1的类型 操作数2的类型 隐式转换后的类型 布尔 整数 整数 布尔、整数 浮点 浮点 “老师,又是分式又是上标的,没法输入呀……” “要想实现正确的运算,先要能够写出正确的表达式。小 萌,你知道代数式a(1+ a-b 100 )n在程序代码里应该写成什么 样的表达式吗?” “其实很简单,记住:乘号不能省略,用运算符和括号将 式子的运算体现在一行上即可。上面这个代数式应该写作表达 式:a*(1+(a–b)/100)**n。” “我明白了,就像这个式子里分式用/,次幂用**。” 一 想 想 【问题3-6】 代数式 -b+ b2-4ac 2a 对应的表达式应该是什么样的? 【问题3-7】 下面表达式的运算结果各是什么? 348/25 348//25 358%25 81**0.5 True+2.5 3.6 算术复合赋值运算符 在实际应用中,赋值运算符(=)可以与算术运算、位运算中的二元运算 符构成复合赋值运算符,使得程序更加精练,提高效率。当Python解释器执 行到复合赋值运算符时,先将左边变量与右边表达式做对应的二元运算,然后 再将运算结果赋值给左边的变量。这里先介绍算术复合赋值运算符,其形式及 运算规则如表3-4所示。 表3-4 算术复合赋值运算符 运 算 符 含 义 举 例 展 开 形 式 += 加赋值 x+=y x=x+(y) –= 减赋值 x–=y x=x–(y) *= 乘赋值 x*=y x=x*(y) /= 除赋值 x/=y x=x/(y) %= 取余数赋值 x%=y x=x%(y) //= 取整除赋值 x//=y x=x//(y) **= 幂赋值 x**=y x=x**(y) 注意:在复合赋值运算符中,默认将右边部分视作一个 整体。 一 想 想 【问题3-8】 以下程序段执行完后,x的值是什么? x, y=12, 3 x += y x //= y+2 x **= y-1 3.7 牛 刀 小 试 “小帅,你知道‘好好学习,天天向上’的典故是出自哪 里的吗?” “好像是毛主席给一个小学生写的题词。” “对,这句话现在已经成为鼓励大家好好读书的代表了。 持之以恒就能取得好成绩,反之则差距很大,下面我们一起来 编程计算一下。” 【例3-1】 天天向上的力量。 一年365天,以第1天的能力值为基数,记为1.0,当好好学习时,能力 值相比前一天提高1%,当没有学习时,由于遗忘等原因,能力值相比前一天 下降1%。每天努力和每天放任,一年下来的能力值相差多少呢? 程序代码如下: dayup=(1+0.01)**365 daydown=(1-0.01)**365 print("向上:",dayup,",","向下:",daydown) 程序的运行结果如下: 向上: 37.78343433288728 , 向下: 0.025517964452291125 “哇,每天努力,一年下来能力值提高了37倍啊!” “天哪,每天放任的话,一年下来能力值基本归零了!” “所以,学习和做事都贵在坚持啊!” “嗯嗯,我们一定会好好努力的。” “本单元重点介绍了Python中的基本数字类型、运算符和表达式。要 求同学们能准确使用各种类型的数字,并能熟练地对其进行运算,为后续 的代码编写打下良好基础。” 习 题 3 1. 小明的身高是153.4cm,Python中不能 33 正确表达该身高的数值是 ( )。 A. 153.40 B. 1.534E2 C. 1534 / 10 D. 153.4cm 2. x是一个两位的整数变量,将其十位数与个位数交换位置的语句是 ( )。 A. (x/10)%10 + x//10 B. (x/10)%10 + x%10 C. (x%10)*10 + x%10 D. (x%10)*10 + x//10 3. 关于整数类型的4种进制表示,描述正确的是( )。 A. 二进制、四进制、八进制、十进制 B. 二进制、四进制、十进制、十六进制 C. 二进制、四进制、八进制、十六进制 D. 二进制、八进制、十进制、十六进制 4. 以下不是 33 Python语言的整数类型的选项是( )。 A. 0B1010 B. 88 C. 0x9a D. 0E99 5. hex(255)的执行结果是( )。 A. '0xff' B. '-0xff' C. 0xff.0 D. 0xff 6. Python语言 % 运算符的含义是( )。 A. x与y之商 B. x与y的整数商 C. x与y之商的余数 D. x的y次幂 7. 以下Python浮点数类型错误 33 的是( )。 A. 0.0 B. 96e4 C. -0x89 D. 9.6E5 8. 100 // 3 的执行结果是( )。 A. 3 B. 33 C. 0.333333333333336 D. 33.333333333333336 9. 100 / .3的运算结果是( )。 A. 3 B. 33 C. 33.333333333333336 D. 333.33333333333337 10. 100 ** (1/2)的运算结果是( )。 A. 50.0 B. 10.0 C. 50 D. 10 11. 编写程序实现如下功能: 小明的考试成绩为语文78分、数学85分、英语92分。从键盘上输入这 3科的分数,并计算它们的总分和平均分。