《Python程序设计》——第2章 核心对象、变量、输入和输出 2.1 数值

简介:

本节书摘来自华章计算机《Python程序设计》一书中的第2章,第2.1节,作者:[美]戴维 I.施奈德(David I. Schneider)著,更多章节内容可以访问云栖社区“华章计算机”公众号查看

第2章 核心对象、变量、输入和输出

2.1 数值

计算机所处理的大量数据中均含有数值。在编程术语中,数值称为数字字面量(number literal)。本节将介绍对数值的各种操作以及数值显示的方式。
2.1.1 两种数值类型:整型和浮点型
一个没有小数点的数字称为整型(int,integer的简写),一个带有小数点的数字称为浮点型(float,floating-point的简写)。
screenshot

2.1.2 算术运算符
五种基本的算术运算符是加、减、乘、除和幂运算。Python中加、减、除的运算符分别使用标准的符号+、–、/来表示。但是,用于表示乘法和幂运算的运算符,与通常的数学表示略有不同。
screenshot

除法运算的结果通常是浮点型,即使结果商是一个整数。在其他运算中,如果参与运算的两个数有一个是浮点型,结果即为浮点型,否则结果为整型。
2.1.3 print函数
print函数用于在显示器上显示相应的数值。如果n是一个数字,那么下列语句
screenshot

将显示数字n。由数字、算术运算符和括号可以组成用于计算的数值表达式。作用在表达式上的print函数将显示表达式计算后的结果。单个print函数还可以显示多个数值。如果m、 n、r、…是数值(或者数值表达式),那么语句
screenshot
将依次显示数字(或者数值表达式的值),并用空格分隔。
print函数会触发一个换行操作(newline operation),意味着下一个print函数的输出将从新的一行开始。
例1 算术运算符
下面的程序分别使用了五种标准的算术运算符。[Run]表示执行程序(通过按键〈F5〉或者单击“Run”菜单下的“Run Module”命令)。紧随[Run]之后就是程序的输出结果。当计算2 * (3 + 4)时,括号中的部分将首先进行计算(括号中的表达式总是优先进行计算)。
screenshot

提示:所有例子中出现的程序代码都可以从本书的合作站点上下载。具体可参见前言中的介绍。
2.1.4 变量
在求解数学问题时,量值通常使用一个名字来代表。例如,求解如下算术问题:“如果一辆汽车以50英里/小时的速度行驶,那么14小时后它能够行驶多远?”要解决这个问题,可以采用下面熟悉的公式
距离=速度×行驶时间
例2展示了如何使用Python程序来解决这个问题。
例2 行驶距离
下面的程序使用了速度和行驶时间来计算行驶距离。其中,被赋于数值的那些名称就称为变量。程序第一行的意思是创建(或声明)了变量speed并赋值为50。同样,第二行和第三行分别创建了其他的变量并进行了相应的赋值。
screenshot

数值表达式中也可以使用变量。表达式的计算需要依次将每个变量替换为其值后再进行算术运算。一些使用变量的表达式如:(2 * distance) + 7、n + 1和(a + b) / 3。
一般而言,变量是一个名称,对应着储存在内存的一个数据。本节中的所有数据都是数值。下列的语句形式:
variableName = numericExpression
称为赋值语句。该语句首先计算等号右侧表达式的值,然后将其结果赋于左边的变量。当变量第一次出现在赋值语句的左边时,该变量即被创建。以后对该变量的赋值语句只是为这个变量赋予不同的值。事实上,每个变量均指向了一个存储其数值的内存地址。在表达式使用变量之前,该变量必须先使用赋值语句进行创建。
Python语言规定,变量名必须以字母或下划线开头,并且只能由字母、数字和下划线组成(最短的变量名可以只有一个字母)。有意义的变量名能够帮助其他人(或者稍后的你自己)轻易地回想起变量当初所代表的含义。一些有意义的变量名如:totalSales、rateOfChange和taxRate。作为约定,我们将变量名中除了首个单词外,每个单词的首字母大写,其他都使用小写字母。由于大写字母就像变量名中的驼峰一样,因此这种命名约定称为骆驼命名法(camel casing)。
Python是大小写敏感的,也意味着Python是区分大小写字母的。因此,变量名amount和Amount代表两个不同的变量。
Python中有33个具有特殊含义的单词,称为保留字(或者关键字)。保留字不可以作为变量名而使用。一些保留字如:return、for、while和def。附录B列出了所有的33个保留字。(提示:IDLE编辑器自动地使用橙色高亮显示保留字。)
2.1.5 abs、int与round函数
除了标准的算术运算之外,还有一些常用的运算用于处理数值类型的数据。例如,需要对数字进行四舍五入或者取其绝对值。这些操作可以通过内建函数来完成。与函数相关的有一个或多个数值称为输入,一个数值称为输出。函数可看做返回输出结果。下文中提到的三个函数均是数值输入和输出。
绝对值函数abs(x)就是|x|。该函数将负数中的负号去掉并保持其他部分不变。int函数将保持整数不变,并将浮点数通过丢弃小数部分转换为整数。round(n, r) 函数的结果是四舍五入保留数值n的小数点后r位,参数r可以省略。在这种情况下,n将四舍五入为整数。部分例子如下:
screenshot

括号中的部分可以是数字(如上所示)、数值变量,或者数值表达式。对于表达式的情况,需要首先计算表达式的值来作为函数的输入。
例3 函数
下面的程序在表达式中分别使用了刚刚讲过的三个函数。
screenshot

提示:与变量名类似,函数名是大小写敏感的。比如,round函数是不可以写成Round的。
2.1.6 增量赋值
由于赋值语句中赋值操作开始之前右边的表达式将首先进行计算,下列语句
screenshot

是有意义的。它首先计算右侧表达式的值(也就是,在变量var的值上加1),然后再将求和结果赋给变量var。效果等价于对变量var进行了加1。从内存地址的角度上看,该语句从var的内存地址中取出其值,并计算var + 1,最后将求和结果存在一个内存地址。由于这种计算非常普遍,因此Python专门提供了一种特殊的运算符来执行这种运算。语句
screenshot

可以用下列语句来替换
screenshot

一般而言,如果n是一个数值,那么语句
screenshot

将var的值加上n的值。运算符+=可看做执行了一个增量赋值。其他的增量赋值运算符有–=、=、/=和*=。
例4 增量赋值语句
下面的程序展示了不同的增量赋值运算符。
screenshot

2.1.7 其他两种整型运算符
除了在本节开始为大家介绍的五种标准算术运算符之外,Python中还可以使用整除运算符(//)和求余运算符(%)。假设m和n是两个正整数,当m除以n时,将得到一个整数的商和一个整数的余数,整数的商记为m//n,整数的余数记为m%n。例如,
screenshot

本质上讲,m // n 是两数相除,并去掉结果中的小数部分。m % n是m除以n时的余数。一些例子如下:
screenshot

例5 转换长度
下面的程序将41英寸转换为3英尺5英寸。
screenshot

2.1.8 括号与优先级
括号可以用来更加清晰地说明表达式的含义。当表达式中有括号时,算术运算符的执行顺序按照以下的优先级进行:

  1. 括号中的部分优先计算(由内而外)。
  2. 幂运算。
  3. 乘法、除法(排列组合和整数)、求余运算。
  4. 加法和减法。
    多个同级运算符之间由左向右进行运算。例如,8 / 2 3等价于(8 / 2) 3。

好的编程习惯应该尽可能多地使用括号,这样就不需要刻意记忆优先级的规则。例如,将2 3 + 4写为(2 3) + 4,将4 + 2 3写为4 + (2 3)。
2.1.9 三种类型的错误
文法和标点符号错误称为语法错误。一些使用不当的语句及其错误如表2-1:
screenshot

当代码由解释器分析(在程序开始运行之前)时,语法错误会高亮显示,Python会弹出类似于图2-1的消息框。在单击“OK”按钮后,Python会用一个闪烁的光标定位程序中出现错误的可能位置。
screenshot

在程序正在运行时出现的错误称为运行时错误或异常。一些使用不当的语句及其错误如表2-2所示。
screenshot

表2-2中,前两个错误是NameError,第三个是ZeroDivisionError。当Python遇到异常时,Python将终止当前程序的执行并显示如图2-2所示的消息。这个出错消息的最后两行定位到引发错误的语句并给出错误的类型。
screenshot

第三种错误称为逻辑错误。这样的错误出现意味着程序没有按照预想的方式执行。例如,语句
screenshot

语法上没有问题,却得不到正确的结果。计算平均值的正确方法是:
screenshot

所以,逻辑错误是最难发现与定位的错误。
2.1.10 内存中的数值对象
思考下面的两行代码:
screenshot

图2-3展示了这两行代码执行时内存的变化情况。当第一行代码执行时,Python分配了一块内存保存数字5。变量n可看做是引用(或指向)数值5的内存地址。当第二行代码执行时,Python又分配了一个新的内存地址保存数值7,并将变量n重新指向新的内存地址。内存中的数字5可看做被丢弃了。最终,Python通过垃圾回收进程将孤立的数值从内存中移除。
screenshot

注释

  1. 变量所使用的名称有时也称为标识符。
  2. 数值表达式可以是量、变量、函数与运算符的任意组合,并且表达式的计算结果是一个数值。而一个单独的量或者变量是表达式的一种特殊情况。
  3. 表达式或赋值中所使用的数值字面量不可以包含逗号、美元号($)和百分号。此外,也不允许包含混合数字,如8 1/2。
  4. 当数字n是两个相邻整数的中间值(例如1.5、2.5、3.5和4.5)时,round函数将返回与其最为接近的偶数。例如,round(2.5)的结果是2,而round(3.5)的结果是4。
  5. 使用科学计数法,数字可以写成b·10r的形式。其中,b是一个从1到(但不包括)10用于表示量级的数字,r是一个整数。Python经常使用科学计数法来表示非常大或非常小的数值,相应地,b·10r写成be+r或be-r(字母e是指数的缩写)。例如,当执行语句print(123.8 (10 * 25))时,结果显示为1.238e+27。
  6. 本节介绍的函数都是内建函数,因为它们就是Python语言中的一部分。在第4章,我们将为大家介绍如何创建自己的函数。这些函数通常也叫作用户自定义函数。用户自定义这种说法也有点不太准确。这些函数事实上应该叫作程序员自定义函数。
  7. IDLE编辑器使用不同的颜色呈现语言中的不同元素。例如,一般文本使用黑色,而内建函数(如print、abs、int、round)则使用紫色。
  8. “异常”是“异常(坏)事件”的简称。
    实践问题2.1
  9. 计算 3 + 4×5。
  10. 说明下面两个赋值语句的不同:
    screenshot
  1. 根据要执行的代码填写表格中变量对应的值。
    screenshot

  2. 写一个语句表示数值变量var的值增加5%。

习题2.1

在习题1~12中,在不使用计算机的情况下,计算数值表达式的值,之后再使用Python验证你的答案。
screenshot

在习题13~18中,确定哪个名称是合法的变量名。
screenshot

在习题19~24中,当a = 2、b = 3、c = 4时,计算数值表达式的值。
screenshot

在习题25~30中,写出计算并显示相应值的代码。
screenshot

在习题31和32中,根据要执行的代码填写表格中变量对应的值。
screenshot

在习题33~38中,根据给出的代码写出输出结果。
screenshot
screenshot

在习题39~42中,找出其中的错误。
screenshot

在习题43~48中,给出函数的返回结果。
screenshot

在习题49~54中,当a = 5、b = 3时,给出函数的返回结果。
screenshot

在习题55~60中,用增强赋值运算符改写语句。
screenshot

在习题61~68中,编写程序使得每行代码实现每一个步骤。

  1. 计算利润 下面的步骤可以计算公司的利润。
    (a) 创建变量revenue,并赋值为98 456。

(b) 创建变量costs,并赋值为45 000。
(c) 创建变量profit,并赋值为变量revenue和costs的差值。
(d) 输出变量profit的值。

  1. 股票购买 下面的步骤可以计算股票购买的数量。
    (a) 创建变量costPerShare,并赋值为25.625。

(b) 创建变量numberOfShares,并赋值为400。
(c) 创建变量amount,并赋值为costPerShare和numberOfShares的乘积。
(d) 输出变量amount的值。

  1. 折扣价格 下面的步骤可以计算物品降价30%后的价格。
    (a) 创建变量price,并赋值为19.95。

(b) 创建变量discountPercent ,并赋值为30。
(c) 创建变量markdown,并赋值为price和倍数值(discountPercent除以100)的乘积。
(d) 从price中减去markdown。
(e) 输出变量price的值(保留小数点后两位)。

  1. 收支平衡 下面的步骤可以计算公司的收支平衡,即公司为了实现收支平衡必须生产和销售的物品数量。
    (a) 创建变量fixedCosts,并赋值为5 000。

(b) 创建变量pricePerUnit,并赋值为8。
(c) 创建变量costPerUnit,并赋值为6。
(d) 创建变量breakEvenPoint,并赋值为fixedCosts除以(pricePerUnit和costPerUnit的差值)的商。
(e) 输出变量breakEvenPoint 的值。

  1. 储蓄账户 下面的步骤可以计算出储蓄账户中以5%年复合利息存入的100美元三年后的余额。
    (a) 创建变量balance,并赋值为100。

(b) 以5%增加变量balance的值。
(c) 以5%增加变量balance的值。
(d) 以5%增加变量balance的值。
(e) 输出balance的值(保留小数点后两位)。

  1. 储蓄账户 下面的步骤可以计算出储蓄账户中每年初固定存入100美元以5%年复合利息计算三年后的余额。
    (a) 创建变量balance,并赋值为100。

(b) 以5%增加变量balance的值,并再加上100。
(c) 以5%增加变量balance的值,并再加上100。
(d) 以5%增加变量balance的值。
(e) 输出balance的值(保留小数点后两位)。

  1. 储蓄账户 下面的步骤可以计算出储蓄账户中以5%年复合利息存入的100美元十年后的余额。
    (a) 创建变量balance,并赋值为100。

(b) 变量balance乘以1.05的10次幂。
(c) 输出balance的值(保留小数点后两位)。

  1. 股票利润 下面的步骤可以计算出股票售出的利润比例。
    (a) 创建变量purchasePrice,并赋值为10。

(b) 创建变量sellingPrice,并赋值为15。
(c) 创建变量percentProfit,并赋值为sellingPrice和purchasePrice差值乘以100再除以purchasePrice。
(d) 输出percentProfit的值。
在习题69~78中,编写相应的程序完成问题的求解。程序中应当为每个量值使用变量。

  1. 玉米产量 假设土地亩产玉米18吨,那么30亩大的农场可以种植多少吨玉米?
  2. 抛物运动 假设一个球以初始速度每秒50英尺和初始高度5英尺向上笔直抛出。三秒后球所在高度是多少?提示:t秒后的高度可以使用表达式–16t2+v0t+h0计算得出。其中,v0是初始速度,h0是初始高度。
  3. 平均速度 如果一辆汽车2点从华盛顿出发,并在7点到达纽约,平均速度是多少呢?提示:华盛顿和纽约相距233英里。
  4. 每公里汽油消耗 一个驾驶员想计算他的每公里油耗。在23 352英里时(里程表所示)灌满油箱。在23 695英里时油箱再次加入14加仑后灌满。该车辆在两次加油期间每公里平均消耗多少加仑汽油?
  5. 水使用量 一项调查表明美国人平均每人每天要消耗掉1600加仑的水,其中也包括了工业的用水。那么美国一年要消耗掉多少加仑的水呢?提示:美国现人口为3.15亿。
  6. 匹萨 美国人平均每秒要吃掉350片匹萨。那么一天会吃掉多少片匹萨呢?
  7. 饭店 美国大约有12%的饭店是匹萨店,而美国大约有7万家匹萨店。估算美国饭店的总体数量。
  8. 人口增长 2000年美国人口大约为2.81亿,预计到2050年将达到4.04亿。估算美国在21世纪的前50年里的人口增长率。结果四舍五入至最近的整数。
  9. 美国国家债务 假设美国国家债务总量为1.68×1013美元,而美国人口为3.1588×108。计算人均美国国家债务。结果四舍五入至最近的整数。
  10. 卡路里 估算1立方英里大小的巧克力冰激凌中卡路里的数量。
    提示:1英里有5 280英尺,1立方英尺的巧克力冰激凌大约包含有48 600卡路里。

实践问题2.1的解答

  1. 60。乘法运算要先于加法运算。如果原本希望加法要先于乘法进行运算,表达式应该写成(3 + 4) * 5。
  2. 第一个赋值语句将变量var2的值赋给了变量var1,而第二个赋值将变量var1的值赋给var2。
  3. screenshot

每执行一个赋值语句,只有一个变量(等号左边的变量)的值会发生变化。

  1. 下面的四个语句都可以表示将var的值增加5%:
    screenshot
相关文章
|
4天前
|
Python
[oeasy]python050_如何删除变量_del_delete_variable
本文介绍了Python中如何删除变量,通过`del`关键字实现。首先回顾了变量的声明与赋值,说明变量在声明前是不存在的,通过声明赋予其生命和初始值。使用`locals()`函数可查看当前作用域内的所有本地变量。进一步探讨了变量的生命周期,包括自然死亡(程序结束时自动释放)和手动删除(使用`del`关键字)。最后指出,删除后的变量将无法在当前作用域中被访问,并提供了相关示例代码及图像辅助理解。
97 68
|
6天前
|
Shell Python
[oeasy]python049_[词根溯源]locals_现在都定义了哪些变量
本文介绍了Python中`locals()`函数的使用方法及其在调试中的作用。通过回顾变量赋值、连等赋值、解包赋值等内容,文章详细解释了如何利用`locals()`函数查看当前作用域内的本地变量,并探讨了变量声明前后以及导入模块对本地变量的影响。最后,文章还涉及了一些与“local”相关的英语词汇,如`locate`、`allocate`等,帮助读者更好地理解“本地”概念在编程及日常生活中的应用。
26 9
|
9天前
|
缓存 监控 算法
Python内存管理:掌握对象的生命周期与垃圾回收机制####
本文深入探讨了Python中的内存管理机制,特别是对象的生命周期和垃圾回收过程。通过理解引用计数、标记-清除及分代收集等核心概念,帮助开发者优化程序性能,避免内存泄漏。 ####
23 3
|
18天前
|
Python
Python三引号用法与变量详解
本文详细介绍了Python中三引号(`"""` 或 `'''`)的用法,包括其基本功能、如何在多行字符串中使用变量(如f-string、str.format()和%操作符),以及实际应用示例,帮助读者更好地理解和运用这一强大工具。
38 2
|
1月前
|
人工智能 Python
[oeasy]python039_for循环_循环遍历_循环变量
本文回顾了上一次的内容,介绍了小写和大写字母的序号范围,并通过 `range` 函数生成了 `for` 循环。重点讲解了 `range(start, stop)` 的使用方法,解释了为什么不会输出 `stop` 值,并通过示例展示了如何遍历小写和大写字母的序号。最后总结了 `range` 函数的结构和 `for` 循环的使用技巧。
32 4
|
2月前
|
Python
【10月更文挑战第5天】「Mac上学Python 8」基础篇2 - 变量深入详解
本篇将详细介绍Python中变量的使用方式和进阶操作,涵盖变量的输入与输出、变量的多重赋值、变量的内存地址管理以及变量的传递和交换等操作。通过本篇的学习,用户将对变量的使用有更深入的理解,并能灵活运用变量进行各种编程操作。
55 1
【10月更文挑战第5天】「Mac上学Python 8」基础篇2 - 变量深入详解
|
21天前
|
机器学习/深度学习 存储 数据挖掘
Python 编程入门:理解变量、数据类型和基本运算
【10月更文挑战第43天】在编程的海洋中,Python是一艘易于驾驭的小船。本文将带你启航,探索Python编程的基础:变量的声明与使用、丰富的数据类型以及如何通过基本运算符来操作它们。我们将从浅显易懂的例子出发,逐步深入到代码示例,确保即使是零基础的读者也能跟上步伐。准备好了吗?让我们开始吧!
26 0
|
2月前
|
存储 缓存 Java
深度解密 Python 虚拟机的执行环境:栈帧对象
深度解密 Python 虚拟机的执行环境:栈帧对象
70 13
|
2月前
|
存储 编译器 Python
Python--变量、输出与输入
【10月更文挑战第5天】
|
2月前
|
测试技术 Python
Python MagicMock: Mock 变量的强大工具
Python MagicMock: Mock 变量的强大工具
51 4