Python程序设计课件第2章 数据类型、运算符及表达式_第1页
Python程序设计课件第2章 数据类型、运算符及表达式_第2页
Python程序设计课件第2章 数据类型、运算符及表达式_第3页
Python程序设计课件第2章 数据类型、运算符及表达式_第4页
Python程序设计课件第2章 数据类型、运算符及表达式_第5页
已阅读5页,还剩76页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2.1数据类型第二章数据类型、运算符及表达式of311在程序中使用的变量名、函数名,常量名等统称为标识符,在Python里,标识符由字母、数字、下划线组成。但不能以数字开头。另外Python中的标识符是区分大小写的。关于Python标识符有如下几点说明:(1)以下划线开头的标识符是有特殊意义的。(2)以单下划线开头的标识符(_xxx)代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“fromxxximport*”而导入。(3)以双下划线开头的标识符(__xxx)代表类的私有成员。(4)以双下划线开头和结尾的标识符(__xxx__)代表Python里特殊方法专用的标识,如__init__()代表类的构造函数。2.1.1标识符2.1数据类型of312(5)在对变量进行命名时应尽量避免使用上述样式。除此之外,还有一些字符串是Python规定的具有特殊意义的,称为保留字或关键字,用户定义的标识符不能与之相同。常见的保留字如下所示:False class finallyisreturnNonecontinuelambdaTrue def fromnonlocalwhileanddelglobalnot with…aselifif oryieldtryassertElseimportpassbreak exceptinraisefor下面是一部分保留字的含义。if:条件判断语句。for:用于遍历迭代器每个元素。try:与except,finally配合使用处理在程序运行中出现的异常情况。2.1.1标识符第二章数据类型、运算符及表达式2.1数据类型of313一、遵守国家法律制度二、遵守校规校纪三、遵守实验室管理规定、课堂纪律1、不准破坏性操作,不准乱设口令和修改机内配置参数,不准删除系统文件,不准修改机房操作系统、恶意传播计算机病毒、安装游戏软件等与教学无关的行为;2、保持机房安静,不准大声喧哗和打闹。3、严禁在机房内抽烟、吃喝及乱扔废弃杂物。4、严禁浏览不健康及非法网站,严禁玩电子游戏。5、严禁传播、下载不健康或非法内容。6、严禁从事干扰、破坏他人上机的行为。7、使用完毕后关机、放好凳子、收好键盘抽,带走自己产生的垃圾从标志符命名规则到规则意识,无规矩不成方圆,工作、生活和学习,要按规矩办事,在团队中各尽其责,才会高效地完成任务第二章数据类型、运算符及表达式2.1数据类型of314cass:用于定义类型。def:用于定义函数和类型的方法。pass:表示此行为空,不运行任何操作。assert:用于程序调试阶段时测试运行条件是否满足。yield:在迭代器函数内使用,用于返回一个元素。自从Python2.5版本以后。这个语句变成一个运算符。raise:制造一个错误。import:导入一个模块或包。from:从包导入模块或从模块导入某个对象,与import配合使用。as:将导入的对象赋值给一个变量。in:判断一个对象是否在一个字符串/列表/元组里。这些保留字中,除了False、None和True外,其余保留字都不能作为一个值赋给变量,在Python3.X中,所有的保留字都不能被赋值。2.1.1标识符第二章数据类型、运算符及表达式2.1数据类型of315需要注意的是,保留字并不是一成不变的,随着Python版本的变迁,有些字符串会加入到保留字中。除了关键字外,还有转义字符串,转义字符串就是在一些字符或字符串前加“\”,用来表示一些无法显示的字符,比如换行符。表2.1是一些转义字符串。2.1.1标识符表2.1常用的转义字符及其含义第二章数据类型、运算符及表达式2.1数据类型of3162.1.1标识符表2.1常用的转义字符及其含义(接上表)第二章数据类型、运算符及表达式2.1数据类型of317在程序执行过程中,其值不发生改变的量称为常量。常量分为直接常量和符号常量。直接常量(字面常量)包括以下几种:(1)整型常量:12、0、-3;(2)实型常量:4.6、-1.23;(3)字符常量:‘a’、‘b’。符号常量是指用标识符代表一个常量。需要注意的是,Python没有真正意义上的符号常量。但是有时候会需要用到符号常量。一般是在import语句下面用大写字母作为常量名,如:NUMBER=100。但这并不意味着这个值不可以被改变。2.1.2变量和常量第二章数据类型、运算符及表达式2.1数据类型of318习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区别。使用符号常量的好处是能做到“一改全改”。即如果该常量被使用了很多次也只需在最开始的地方改变其初值即可。值可以改变的量称为变量。一个变量应该有一个名字,在内存中占据一定的存储单元。在Python中,对一个变量赋值之前并不需要对其定义或声明,它会在第一次赋值时自动生成。在使用一个变量之前需要先对其进行赋值。变量命名规则如下:(1)变量名必须以字母或下划线开头,后面可以跟任意数量的字母、下划线和数字。变量名中只能有字母、下划线和数字;(2)区分大小写,如Python和python是不同的;(3)变量名不能使用保留字。2.1.2变量和常量第二章数据类型、运算符及表达式2.1数据类型of319下面的例子是将“helloworld”这个字符串赋给了变量a,然后再将a打印出来。>>>a='helloworld'>>>print(a)helloworld >>>当一个变量不再使用的时候,可以使用del命令将其删除。删除之后要想使用该变量名需要重新赋值,如下:>>>a='abc'>>>print(a)abc>>>dela2.1.2变量和常量第二章数据类型、运算符及表达式2.1数据类型of3110变量只是对象的引用值。在Python中对象有类型但变量没有类型,也就是说,不需要为一个变量声明类型而可以直接赋值创建各种类型的对象变量,也可以将不同的对象赋给同一个变量。>>>a='thisisastring'>>>print(a)thisisastring>>>a=123456>>>print(a)123456>>>a=['a','b','c','d']>>>print(a)['a','b','c','d']>>>2.1.2变量和常量第二章数据类型、运算符及表达式2.1数据类型of3111对象是Python最基本的概念之一,Python中的一切都是对象。Python也提供了一些内置对象,常见的Python内置对象如表2.2所示。除此之外,还有大量的标准库和扩展库对象,标准库是Python默认安装的,但需要导入之后才能使用其中的对象(如何导入库会在后面详细讲到),扩展库则不是默认安装的,需要先安装在导入才能使用其中的对象,当然也可以选择自定义对象,这会在后面的章节讲到。Python具有自动内存管理功能,对于没有任何变量指向的值,Python会自动将其删除。Python会跟踪所有的值,对没有变量的值进行删除。2.1.2变量和常量第二章数据类型、运算符及表达式2.1数据类型of31122.1.2变量和常量表2.2Python内置对象对象类型示例简要说明数字1,1.2,1.1e4数字的长度无限制字符串“abc”,’a’,’123’一般使用单引号和双引号作为界定符,三引号一般做多行注释使用列表[1,2,3],[‘1’,’2’,’3’]元素存放在一组方括号中,用逗号隔开字典{name:Jack,age:20}元素存放在一组大括号中,元素为“键:值”形式元组(2,1,3)元素放在小括号中,且元组中的元素值不可更改文件f=open(‘file_name.txt’,’r’)open是Python内置函数,用来以指定模式打开文件集合{1,2,3}元素放在大括号中,且元素不可重复布尔型True,False

空类型None

编程单元函数和类在Python中,函数和类都属于可调用对象第二章数据类型、运算符及表达式2.1数据类型of3113整型就是整常数。在Python3.X版本中,一般整数和长整数类型已经合二为一了。所以,现在Python里的整型精度是无限的,如下:>>>2**1001267650600228229401496703205376>>>Python不仅支持十进制整型,也支持十六进制、八进制以及二进制的整型。十六进制的数以0x或者0X开头,后面跟一个16进制的数,由0~9以及a~f组成。分别代表0~15。其中,a~f不区分大小写。八进制的数以0o或者0O(数字0加字母o或O)开头,后面跟一个八进制的数,由0~7组成。二进制的数以0b或者0B开头,后面跟一个二进制的数,由0、1组成。2.1.3整型第二章数据类型、运算符及表达式2.1数据类型of3114春秋战国时期,我国古人就已经熟练地使用十进位制的算筹记数法,比世界上第二个发明十进制的国家古代印度起码早约1000年,提高学生的民族自豪感和自信心,同学们要进一步思考在新时代如何延续古圣先贤的智慧再创辉煌,实现伟大复兴的中国梦。1996年“阿丽亚纳-5”运载火箭将64位格式转化为16位格式导致内存溢出而引起火箭发射后爆炸的重大事故;被除数为0的千年虫问题等。同学们在依赖科学技术的同时,更应该保持一丝不苟、严谨认真的学习和工作态度。2.1.3整型第二章数据类型、运算符及表达式2.1数据类型of3115二进位制思想起源。源于《周易》中的八卦法,早于第二发明者德国数学家莱布尼兹(公元1646—1716)2000多年。负数的发现。这个发现最早见于《九章算术》,这一发现早于印度600多年,早于西方1600多年。早在两千多年前,我国就有了正负数的概念,掌握了正负数的运算法则。2.1.3整型第二章数据类型、运算符及表达式2.1数据类型of3116Python提供了内置函数hex(a)、oct(a)、bin(a),可以将一个十进制数a分别转换成十六进制、八进制及二进制的字符串,如下:>>>a=100>>>hex(a)'0x64'>>>oct(a)'0o144'>>>bin(a)'0b1100100'>>>2.1.3整型第二章数据类型、运算符及表达式2.1数据类型of3117此外int(string,b)函数可以将一个字符串按照给定的进制转换成数字,如下:>>>string='100'>>>print(int(string,2))4>>>print(int(string,8))64>>>print(int(string,10))100>>>print(int(string,16))2562.1.3整型第二章数据类型、运算符及表达式2.1数据类型of3118浮点数即带有小数部分的数字。在Python里,浮点数分为两类,一种是普通的由数字和小数点组成的,如1.0、2.3等。还有这是由科学计数法表示的浮点数。由数字,小数点以及科学计数标志e或E组成,如:2.1e10这表示2.1ⅹ1010。需要注意的是,虽然2.1e10的结果是一个整数,但2.1e10属于浮点数,2e10也同样属于浮点数,如下:>>>type(2e5)<class'float'>>>>注:type函数可以显示当前对象的数据类型。2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3119有一种特殊的浮点数是小数对象,与普通浮点数相比,小数对象有固定的位数和小数点,也就是说,小数是有固定精度的浮点数。小数对象与其他数据类型不同,小数对象需要导入一个decimal模块后调用函数才能创建。#创建小数对象>>>fromdecimalimportDecimal>>>a=Decimal('0.1')>>>print(a)0.1>>>type(a)<class'decimal.Decimal'>需要注意的是,小数对象只能与小数对象和整数进行运算,如果和普通浮点数进行运算的话会出现语法报错。2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3120>>>fromdecimalimportDecimal>>>a=Decimal('0.10')>>>b=Decimal('0.20')>>>print(a/b)0.5>>>c=0.2>>>print(a/c)Traceback(mostrecentcalllast):File"<pyshell#154>",line1,in<module>print(a/c)TypeError:unsupportedoperandtype(s)for/:'decimal.Decimal'and'float'2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3121还可以通过这个模块来设置全局精度,如下:>>>fromdecimalimportDecimal>>>fromdecimalimportgetcontext>>>getcontext().prec=4#设置精度>>>print(1/3)0.3333333333333333>>>a=Decimal('0.1')>>>b=Decimal('0.3')>>>print(a/b)0.3333>>>但该方法只对小数对象有用,而且如果小数部分的精度不够,也不会补0。2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3122下面的例子只是设置精度:>>>fromdecimalimportDecimal>>>fromdecimalimportgetcontext>>>getcontext().prec=4#设置全局精度>>>a=decimal.Decimal('0.1')>>>b=decimal.Decimal('0.3')>>>print(a/b)0.3333>>>withdecimal.localcontext()aslocal:#设置局部精度

local.prec=1 print(a/b)0.3关于with…as…语句,后面会做介绍。2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3123下面的例子只是设置精度:>>>fromdecimalimportDecimal>>>fromdecimalimportgetcontext>>>getcontext().prec=4#设置全局精度>>>a=decimal.Decimal('0.1')>>>b=decimal.Decimal('0.3')>>>print(a/b)0.3333>>>withdecimal.localcontext()aslocal:#设置局部精度

local.prec=1 print(a/b)0.3关于with…as…语句,后面会做介绍。2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3124由于用来存储数值的空间有限,浮点数缺乏精确性。例如,以下语句的计算结果应该得到0,但结果却不是0。虽然很接近0,但没有足够的位数去实现这样的精度。>>>print(0.1+0.1+0.1+0.1-0.3-0.1)2.7755575615628914e-17>>>不过使用小数对象就可以改正了。用户可以通过decimal模块中的Decimal构造函数创建一个小数对象,传人的字符串就是小数。当不同精度的小数对象在表达式中混用时,Python会自动升级成位数最多的小数。2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3125如果想将一个浮点数按照四舍五入的方法保留位数的话,还可以使用round()函数。round()函数很简单,就是对浮点数进行近似取值,保留一定位数的小数。>>>a=0.334>>>b=0.335>>>print(round(a,2))0.33>>>print(round(b,2))0.34但因为在机器中浮点数不一定能精确表达,所以round函数可能会出错,如下:>>>print(round(2.675,2))2.67>>>2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3126可以看到,结果应该为2.68但实际是2.67,这并不是一个bug。在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位的,机器已经做出了截断处理。那么在机器中保存的2.675这个数字就比实际数字要小那么一点点。这一点点就导致了它离2.67要更近一点点,所以保留两位小数时就近似到了2.67。所以如果对精确度要求很高的话,应该尽量避开使用round()函数,而使用decimal模块。2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3127浮点运算速度是指计算机系统每秒可以处理的浮点操作,通常用FLOPS来表示。世界排名前四的中国神威.太湖之光安装了40960个中国自主研发的“申威26010”众核处理器,它采用64位自主申威指令系统和大规模并行处理体系结构,峰值性能为12.5亿亿次/秒,持续性能为9.3亿亿次/秒;世界排名前四的中国的“天河二号”峰值性能为5.49亿亿次/秒,持续性能为3.39亿亿次/秒,采用了自创的新型异构多态体系结构。我国运用小数的时间,早于西方1100多年。超级计算机被称为‘国家重器’,属于国家战略高技术领域,是世界各国竞相角逐的科技最高点。2.1.4浮点型第二章数据类型、运算符及表达式2.1数据类型of3128Python3.0引入了分数这一数据类型。和小数对象相同,要创建分数对象,需要引入一个模块Fraction,如下所示:>>>fromfractionsimportFraction>>>x=Fraction(1,3)>>>y=Fraction(1,2)>>>print(x)1/3>>>print(y)1/2>>>type(x)<class'fractions.Fraction'>>>>2.1.5分数第二章数据类型、运算符及表达式中国完整的分数运算法则出现在《九章算术》中,我国早于印度500多年。2.1数据类型of3129可以传入两个参数即分子和分母来创建分数,也可以使用下面的方法:>>>fromfractionsimportFraction>>>print(Fraction(0.5))1/2>>>可以通过from_float函数和float函数实现分数和浮点数的转换。>>>fromfractionsimportFraction>>>a=2.5>>>b=Fraction.from_float(2.5)>>>print(b)5/2>>>print(float(b))2.52.1.5分数第二章数据类型、运算符及表达式2.1数据类型of3130尽管可以将浮点数转换成为分数,但在某些情况下会造成精度损失。出现这种情况时,可以通过限制最大分母值来得到结果。如下:>>>fromfractionsimportFraction>>>b=Fraction.from_float(0.3)>>>a=b.limit_denominator(10)>>>print(a)3/10>>>print(b)5404319552844595/18014398509481984>>>可以看到,实际上b的值并没有改变。2.1.5分数第二章数据类型、运算符及表达式2.1数据类型of3131值得注意的是,Python会自动进行约分,分子或分母中有负号时,自动约分会最终将负号归于分子。>>>fromfractionsimportFraction>>>print(Fraction(0.5))1/2>>>print(Fraction(5/10))1/2>>>print(Fraction(5/-10))-1/2>>>2.1.5分数第二章数据类型、运算符及表达式2.1数据类型of3132分数可以和整数、浮点数、当然还有分数本身进行二元运算,两个分数相加得到分数,相关规则如下:(1)一个分数加一个整数得到一个分数;(2)一个分数加一个浮点数得到一个浮点数。其他二元运算和加法相同。2.1.5分数第二章数据类型、运算符及表达式2.1数据类型of3133此外,Fraction对象有两个属性numerator和denominator,分别代表了分子和分母,如下:>>>fromfractionsimportFraction>>>a=Fraction(5/10)>>>print(a)1/2>>>print(a.numerator)1>>>print(a.denominator)2>>>2.1.5分数第二章数据类型、运算符及表达式2.1数据类型of3134除了上面这些以外,fraction模块提供了一个gcd函数,可以迅速找到两个数的最大公约数。>>>fromfractionsimportgcd>>>print(gcd(256,16))16>>>2.1.5分数第二章数据类型、运算符及表达式2.1数据类型of3135在Python里,有一种特殊的数据类型叫布尔型(bool),该类型只有两种取值:True和False,分别代表真和假。实际上,可以把True和False看成是Python内置的变量名,值分别为1和0。因为实际上True的值就是1,而False则为0,如图2.1所示。2.1.6布尔型图2.1布尔型的值在有了bool数据类型之后,可以用True或False更清楚、准确地设置标志位,例如flag=False,使标志位的含义更加清晰;也可以用于条件语句,如无限循环语句whileTrue:。第二章数据类型、运算符及表达式2.1数据类型of3136Python除了与大多数程序设计语言一样,把整数0当成False,整数1代表True,也把任意的非空数据结构看作True,把任意的空数据结构看作False。也就是说Python的每个对象都有一个属性代表该对象是True还是False。每个对象不是True就是False。数字非0即为True,其他对象非空即为True,如下:>>>bool(0)False>>>bool(10)True>>>list_a=[]>>>print(bool(list_a))False2.1.6布尔型第二章数据类型、运算符及表达式2.1数据类型of3137>>>str1=''>>>print(bool(str1))False>>>str1='123'>>>print(bool(str1))True>>>print(bool(None))False>>>这也表示了每个对象都可以作为循环结构或选择结构的条件表达式,如if1:或while0:是合法的,这一部分会在后面谈到。2.1.6布尔型第二章数据类型、运算符及表达式2.1数据类型of3138Python里还有一个特殊的对象,即空值,该对象只有一个值用None表示,None并不等于0或其他一些空的数据类型。而是一个特殊的值。代表什么也没有。另外None的布尔值为False。2.1.6空值第二章数据类型、运算符及表达式2.2输入与输出2.1数据类型2.3运算符与表达式of5639第二章数据类型、运算符及表达式2.2输入与输出of3140print函数的作用就是将对象打印到屏幕上,有人也许会疑惑,在之前的例子中并没有使用print,却依然将对象的值打印到了屏幕上,这是因为之前都是在Python的交互式解释器中进行的。它会自动打印表达式的值。在Python里,print可以打印任意类型的值,哪怕输一个列表之类的复杂数据类型,也可以打印出来,关于复杂数据类型会在后面讲到。当需要打印多个对象时,对象之间用逗号隔开。可以传给print函数确定的字符串等数据,如果传入一个表达式,它会打印出表达式的值,可能是布尔值也可能是运算结果。2.2.1print函数第二章数据类型、运算符及表达式2.2输入与输出of3141在Python解释器中输入help(print)来获取print函数有哪些参数,如图2.2所示。2.2.1print函数图2.2print函数第二章数据类型、运算符及表达式2.2输入与输出of3142可以看到,print函数一共有4个参数,分别是sep、end、file和flush。由于flush参数在客户端脚本上基本用不上,这里就不介绍了,其他参数的含义如下:(1)sep是当需要打印多个对象时,对象之间的分隔符,默认是一个空格。(2)end是加在打印文本末尾的字符串,默认是换行符,所以当使用print函数时,它是会默认换行的。(3)file指定了文本需要发送到的文件、标准流或者类似文件的对象。默认是sys.stdout,即它会将文本输出到控制台上,如果想将文本保存到文件,就可以通过修改file的值来达到目的,但需要注意的是,不能直接把文件名传给file参数,而应该通过open()函数将文件传给file如:file=open(“result.txt”),关于open函数会在以后的章节讲到。2.2.1print函数第二章数据类型、运算符及表达式2.2输入与输出of3143在使用print函数的时候,一般不需要把所有参数都写出来,除非想更改参数的值,例如print(1,end=’’)就是将1打印出来,但结尾不换行,而是加一个空格。下面看一个例子。>>>a=12>>>b='hello'>>>print(a,b)12hello用‘,’代替print打印的对象中间的空格。如下:>>>print(a,b,sep=',')12,hello用空格代替打印语句结尾的换行符。如下:>>>print(a,end='');122.2.1print函数第二章数据类型、运算符及表达式2.2输入与输出of3144最后一条语句的打印结果虽然看上去和直接打印a没有什么不同,但实际上结尾是一个空格而不是换行符。另外,参数的顺序并不固定。也就是说,print(a,b,sep=’,’,end=’’)语句和print(a,b,end=’’,sep=’,’)语句的作用是完全相同的。如果想将一个对象的值在一句话中的特定位置打印显示出来,可以使用下列语句。打印整数的语句如下:>>>b=123>>>print('%disanumber'%b)123isanumber>>>2.2.1print函数第二章数据类型、运算符及表达式2.2输入与输出of3145打印浮点数的语句如下:>>>b=123.56>>>print('Hisweightis%f'%b)Hisweightis123.560000>>>如果打印浮点数对小数位有要求,可以使用下列语句保留两位小数:>>>b=3.14159>>>print('%.2fisanumber'%b)3.14isanumber打印字符串的语句如下:>>>name='Jack'>>>print('Hisnameis%s'%name)HisnameisJack2.2.1print函数第二章数据类型、运算符及表达式2.2输入与输出of3146此外print函数可以做一些很有趣的事,例如打印不同形状的符号。打印由*组成的正三角形的代码如下:print('*')print('***')print('*****')print('*******')****************2.2.1print函数第二章数据类型、运算符及表达式2.2输入与输出of3147在使用变量时,要先对变量进行赋值,但如果需要赋给的变量事先不知道,需要用户提供该怎么办?这时候就需要用到输入函数input函数了。在Python3.X中,input函数接收任意输入,并将输入当成字符串类型返回(字符串类型会在后面讲到),即使输入的是数字。如果需要输入的是数字的话,可以使用int()函数和float()函数把输入得到的字符串转成数字再进行操作。2.2.2input函数第二章数据类型、运算符及表达式2.2输入与输出of3148例:>>>x=input("Inputanumber:")Inputanumber:1234>>>type(x)<class'str'>>>>int(x)1234>>>float(x)1234.0>>>如上所示,把输入的值1234赋给了变量x。除此之外,可以在input函数里加入一些语句,作为对输入信息的要求或提示。2.2.2input函数第二章数据类型、运算符及表达式2.2输入与输出of3149如果有时仅仅知道需要输入一个数,却不知道输入的数的类型,如果这时贸然使用int()的函数的话,可能会导致程序出错,如下:>>>a=input('输入一个数\n')输入一个数2.13>>>a=int(a)Traceback(mostrecentcalllast):File"<pyshell#13>",line1,in<module>a=int(a)ValueError:invalidliteralforint()withbase10:'2.13'>>>这时候可以用eval()函数,这个函数将字符串str当成有效的表达式来求值并返回计算结果。这里只用它来将输入的字符串转换成适当的数。2.2.2input函数第二章数据类型、运算符及表达式2.2输入与输出of3150>>>a=eval(input("输入一个数\n"))输入一个数2.13>>>print(type(a))<class'float'>>>>print(a*2)4.26>>>b=eval(input("输入一个数\n"))输入一个数4>>>print(type(b))<class'int'>2.2.2input函数第二章数据类型、运算符及表达式2.2输入与输出of3151除了input函数之外,Python标准库sys还提供了read()和readline()两个函数用来从键盘接收字符。read()函数用来接收指定数目的字符。例如:>>>importsys>>>x=sys.stdin.read(4)#读取4个字符,如果输入字符不足则等待,超出只取前4个abds>>>print(x)abd>>>2.2.3其他输入输出函数第二章数据类型、运算符及表达式2.2输入与输出of3152需要注意的是,当为读取缓冲区的字符时,缓冲区的字符并不会消失,当再次读取时就能继续读取,如下所示。但这一特性有时候也会导致读取数据错误。>>>importsys>>>x=sys.stdin.read(5)abcdefghij>>>print(x)abcde>>>y=sys.stdin.read(5)>>>print(y)fghij>>>当缓冲区的字符数小于要读取的字符数时,会继续等待输入。2.2.3其他输入输出函数第二章数据类型、运算符及表达式2.2输入与输出of3153readline()则是从缓冲区读取字符,遇到换行符结束。例如:>>>importsys>>>x=sys.stdin.readline()abcdefg>>>print(x)abcdefg>>>readline()函数会将输入结尾的换行符也读取,readline()函数也可以带参数。如下:importsys>>>x=sys.stdin.readline(5)abcdefghi>>>print(x)abcde2.2.3其他输入输出函数第二章数据类型、运算符及表达式2.2输入与输出of3154当输入超过所需时,会截断,否则就会遇到换行符结束。如下:importsys>>>x=sys.stdin.readline(5)abc>>>print(x)abc>>>Python标准库pprint提供了另一个输出函数pprint()。可以更好的控制输出格式。如果要输出的内容多于一行则会自动添加换行和缩进来更好地展示输出内容。在这个函数中,参数indent代表缩进,width代表一行最大宽度,depth则是打印的深度,这个主要是针对一些可递归的对象(关于递归,在函数章节中会讲到),如果超出指定depth,其余的用"..."代替。如[1,2,[3]]的深度为2。2.2.3其他输入输出函数第二章数据类型、运算符及表达式2.2输入与输出of31552.2.3其他输入输出函数>>>importpprint>>>data=("thisisalist",[1,2,3,4,5],"thisisyetanotherlist:",[1.0,2.0])>>>pprint.pprint(data,width=30)('thisisalist',[1,2,3,4,5],'thisisyetanotherlist:',[1.0,2.0])>>>print(data)('thisisalist',[1,2,3,4,5],'thisisyetanotherlist:',[1.0,2.0])>>>余下的一些参数就不细细描述了。第二章数据类型、运算符及表达式2.3运算符及表达式2.1数据类型2.2输入与输出of5656第二章数据类型、运算符及表达式2.3运算符及表达式of3157Python运算符包括赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、成员运算符和身份运算符等,分别简要介绍如下:(1)算术运算符:用于各类数值运算。包括加(+)、减(-)、乘(*)、除(/)、求余(或称模运算,%)、幂运算(**)和整除运算(//)。(2)关系运算符:用于比较运算。包括大于(>)、小于(<)、等于(==)、大于等于(>=)、小于等于(<=)和不等于(!=)。(3)逻辑运算符:用于逻辑运算。包括逻辑与(and)、逻辑或(or)、逻辑非(not)。(4)位操作运算符:参与运算的量,按二进制位进行运算。包括按位与(&)、按位或(|)、按位非(~)、按位异或(^)、左移(<<)、右移(>>)

2.3.1Python语言运算符简介第二章数据类型、运算符及表达式2.3运算符及表达式of3158(5)赋值运算符:用于赋值运算,分为简单赋值(=)、复合算术赋值(+=,-=,*=,/=,%=,**=,//=)。(6)身份运算符:包括is和isnot。(7)成员运算符:包括in和notin。表达式就是数据通过运算符以一定规则连接起来的式子。下面会分别介绍各种类型的运算符及使用方法。

2.3.1Python语言运算符简介第二章数据类型、运算符及表达式2.3运算符及表达式of3159表2.3是各个算术运算符的使用方式及作用。

2.3.2算术运算符和算术表达式表2.3算术运算符表算术运算符表达式含义+a+b对a和b进行加法运算-a-b对a和b进行减法运算*a*b对a和b进行乘法运算/a/b对a和b进行除法运算(保留小数部分)**a**ba的b次幂//a//b对a和b进行整法运算(不保留小数部分)%a%ba对b取余第二章数据类型、运算符及表达式2.3运算符及表达式of3160在Python3.X中即使两个整型的数进行除法运算也能保留小数部位,而不会将结果变成整型,如果两个浮点数进行整除运算,得到的结果也会舍去小数部分,如下所示:>>>5/22.5>>>5.2/22.6>>>需要注意的是,在a+b这个表达式中,当a和b都是数字时,执行的是加法运算,当a和b都是字符串时,执行的就是合并运算了,如‘abc’+‘def’=‘abcdef’。这叫运算符的重载,关于重载以后会讲解,除了‘+’之外,‘*’也有重载,下面用代码来直观地看一下。2.3.2算术运算符和算术表达式第二章数据类型、运算符及表达式2.3运算符及表达式of3161>>>a=1>>>b=2>>>print(a+b)3>>>print(a*b)2>>>string='hello'>>>string1='world'>>>print(string+string1)helloworld>>>print(string*3)hellohellohello>>>可以看出,当执行运算的对象数据类型不同时,运算符的作用也不尽相同。2.3.2算术运算符和算术表达式第二章数据类型、运算符及表达式2.3运算符及表达式of3162逻辑运算符及表达式如表2.4所示。2.3.3逻辑运算符和逻辑表达式表2.4逻辑运算符逻辑运算符表达式含义andaandb逻辑与oraorb逻辑或notnota逻辑非在表达式aandb中,只有a的值为真才会计算b的值。在表达式aorb中,只有a的值为假才会计算b的值。逻辑运算符可以连用,如:aandborc,按照从左到右的顺序进行判断,当然括号可以改变运算顺序。第二章数据类型、运算符及表达式2.3运算符及表达式of3163关系运算符是用来对两个对象进行比较的。这两个对象可以是任意的,不仅仅是复杂的数据类型,甚至自己定义的类也可以用关系运算符进行比较,关系运算符及表达式如表2.5所示。2.3.4关系运算符和关系表达式关系表达式的值是布尔型的,即只有True和False两种情况。关系运算符可以连用,如a>b>c,该表达式等价于a>bandb>c。但需要注意的是,用来比较的两个对象一定要是同一数据类型的,否则会出现语法报错。表2.5关系运算符关系运算符表达式含义==a==b等于,比较对象是否相等!=a!=b不等于,判断对象是否不相等>

a>b大于<

a<b小于>=a>=b大于等于<=a<=b小于等于第二章数据类型、运算符及表达式2.3运算符及表达式of3164位运算符就是把数字转换成二进制的数字后再进行计算,表2.6是一些位运算符。2.3.5位运算符接下来用一些例子说明上述位运算符的功能。表2.6位运算符位运算符表达式含义&a&b按位与运算符|a|b按位或运算符^a^b按位异或运算符,~~a按位取反,如:~0b1001=0b0110<<

a<<n(n为正整数)a左移n位,高位丢弃,低位补0>>

a>>n(n为正整数)a右移n位,低位丢弃,高位补0第二章数据类型、运算符及表达式2.3运算符及表达式of3165表格中前三个位运算符都是将进行计算的两个数字转换成二进制数。这里假设a=0b10001,b=0b1001,结果如表2.7所示。2.3.5位运算符这里可以看到a和b的位数不同,在运算中,Python会将位数少的b补位成0b01001。这里两个数的相应部位进行逻辑与,逻辑或或者逻辑异或运算得到的值就是结果的相应部位。>>>bin(0b100010>>2)'0b1000'>>>bin(0b100010<<2)'0b10001000'表2.7表达式运算表达式结果a&b0b1a|b0b11001a^b0b11000第二章数据类型、运算符及表达式2.3运算符及表达式of3166赋值运算符,顾名思义就是赋给对象值的运算符。表2.8是赋值运算符的种类及含义。2.3.6赋值运算符此外,a,b=c,d这样表达式也是允许的,即将c赋给a,d赋给b。进一步也可以使用a,b=b,a,这样就是交换a,b的值。表2.8赋值运算符赋值运算符表达式含义=a=c将c赋给a+=a+=ca=a+c-=a-=ca=a-c*=a*=ca=a*c/=a/=ca=a/c%=a%=ca=a%c**=a**=ca=a**c//=a//=ca=a//c第二章数据类型、运算符及表达式2.3运算符及表达式of3167赋值时生成引用而不是复制拷贝,如下例所示。这是需要注意的。如果想要复制copy生成两个值一样的对象而互不干扰。可以使用copy包中的deepcopy函数。这里不再赘述。>>>L1=[1,2,3]>>>L2=L1>>>L1[0]=2>>>print(L1)[2,2,3]>>>print(L2)[2,2,3]>>>L1=[1,2]>>>print(L2)[2,2,3]>>>print(L1)[1,2]>>>在上面可以看到,当把L1的值赋给L2后,修改L1的同时,L2也会跟着改变。同样地,修改L2,L1也会改变。但如果是对L1重新赋值,指向了另一个对象的话,L2则不会改变的。同样地,对L2重新赋值指向了另一个对象,L1也不会改变。2.3.6赋值运算符第二章数据类型、运算符及表达式2.3运算符及表达式of3168当然,赋值运算符有很多的用法,下面用一个例子来说明。>>>a='hello'>>>print(a)hello>>>a,b='hello',234>>>print(a)hello>>>print(b)234特殊的赋值语句,可以看情况选择使用。此外所有的赋值运算符除了‘=’外,其余的赋值运算符都只能对数值型对象使用,当然一些特殊情况下‘+=’也可以对字符串使用。此外,Python不像C语言那样支持‘++’,‘--’运算符。2.3.6赋值运算符第二章数据类型、运算符及表达式2.3运算符及表达式of3169在Python里还有两种运算符:成员运算符和身份运算符。成员运算符使用来判断某个对象在不在某序列中,如表2.9所示。2.3.7其他运算符表2.9成员运算符成员运算符表达式含义inainlist_a若a在序列list_a中,该表达式为真,反之为假notinanotinlist_a若a不在序列list_a中,该表达式为真,反之为假第二章数据类型、运算符及表达式2.3运算符及表达式of3170下面看个例子:>>>list_a=['a','b','c','d']>>>a='a'>>>print(ainlist_a)True>>>print(anotinlist_a)False>>>相信通过这个例子,大家可以明白如何去使用成员运算符。2.3.7其他运算符第二章数据类型、运算符及表达式2.3运算符及表达式of3171身份运算符是用来判断两个变量所指向的对象是否为同一个对象,这一点与之前关系运算符中的“==”不同,因为“==”是判断两个对象的值是否相等。Python里的变量有3个属性,名字,值和id。身份运算符就是判断id是否相同的,其含义如表2.10所示。2.3.7其他运算符表2.10身份运算符身份运算符表达式含义isaisb若a和b指向的对象为同一个对象,该表达式为真,反之为假isnotaisnotb若a和b指向的对象不是同一个对象,该表达式为真,反之为假在Python中,可以使用一个内置函数id()来查看变量的id。>>>list1=['a','b','c','d']>>>print(id(list1))1232162124424第二章数据类型、运算符及表达式2.3运算符及表达式of3172除了指向同一个内存的会共享一个id外,其余的哪怕两个对象的值相同,id也不会相同。下面再看一个例子:>>>ch1='helloworld'>>>ch2='helloworld'>>>print(ch1isch2)False>>>ch1='abcde'>>>ch2='abcde'>>>print(ch1isch2)True2.3.7其他运算符第二章数据类型、运算符及表达式2.3运算符及表达式of3173一般情况下,Python会为每个对象分配内存,但为了提高内存效率,Python3.X里把相等的且只含字母和数字的字符串指向了同一个内存。是不是只有一些字符串是这样的呢?>>>num1=257>>>num2=257>>>print(num1isnum2)False>>>num1=256>>>num2=256>>>print(num1isnum2)TruePython3.X中还把-5到256的相等整数都在内存中指向同一个内存,这是需要注意的。2.3.7其他运算符第二章数据类型、运算符及表达式2.3运算符及表达式of3174Python的算术表达式具有优先性和结合性,可以将多个算术表达式通过算术运算符连接起来。在进行运算是,Python会根据优先性依次计算。下面是各运算符的优先级。如果优先性相同,则按从左到右的顺序依次执行(幂运算除外,幂运算从右到左)。括号可以改变优先级。虽然运算符有明确的优先级,其优先级如表2.11所示,但对于复杂的表达式还是建议在适当的位置添加括号,让计算顺序更明确。2.3.8运算符的优先级表2.11Python运算符优先级表运算符描述**指数(最高优先级)~+-按位翻转,一元加号和减号(最后两个的方法

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论