《Python程序设计》——第2章 核心对象、变量、输入和输出 2.1 数值-阿里云开发者社区

开发者社区> 华章计算机> 正文

《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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Python编程语言学习:利用locals函数判断某个变量参数之前是否已经被定义/存在/出现
Python编程语言学习:利用locals函数判断某个变量参数之前是否已经被定义/存在/出现
15 0
SAP ABAP 如何查询一个变量表里的变量被哪支程序使用到?
STVARV,维护了如下的变量 Z_PR_PO_PRICE_NO_CHNG,     如何知道该变量是在哪个增强或者用户出口里所调用?   SE3...
1236 0
【Java】java使用反射访问对象方法和成员变量
虽然java是一门静态语言,但是java的反射机制却给java提供了很强大的动态特性,其特点是能让java支持在运行时才能得知名称与内部结构的类,并能访问其所有的方法和成员变量,包括私有方法和私有成员变量。下面我写了一个比较简洁的测试代码,供参考和使用。 测试类 //OBClass.java package com.obo.javaassistdemo; public class
1443 0
Python之NumPy实践之数组和矢量计算
Python之NumPy实践之数组和矢量计算 1. NumPy(Numerical Python)是高性能科学技术和数据分析的基础包。 2. NumPy的ndarray:一种对位数组对象。NumPy最重要的一个特点是其N维数组对象(即ndarray),该对象是是一个快速而灵活的大数据集容器。 3. 创建ndarray data1 = [1,2.4,
1937 0
python/pandas/Numpy数据分析-统计描述,唯一值,值计数
pandas 对象拥有一组常用的数学和统计方法,大部分属于简约统计,用于从Series中提取一个值,或者从DataFrame中提取一列或者一行Series 注意:与NumPy数组相比,这些函数都是基于没有缺失数据的建设构建的,也就是说:这些函数会自动忽略缺失值。
1542 0
Java基础-07.总结private,this,封装,static,成员方法变量,局部变量匿名对象
1:成员变量和局部变量的区别(理解)(1)在类中的位置不同成员变量:类中方法外局部变量:方法定义中或者方法声明上(2)在内存中的位置不同 成员变量:在堆中局部变量:在栈中(3)生命周期不同(成员的创建与销毁时间)成员变量:随着对象的创建而存在,随着对象的消失而消失局部变量:随着方法的调用而存在,随着方法的调用完毕而消失(4)初始化值不同成员变量:有默认值局部变量:没有默认值,必须定义,赋值
1358 0
10059
文章
0
问答
来源圈子
更多
+ 订阅
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载