Talk is cheap. Show me the code.在语言世界里,代码就是生命。
一、print()函数与转义字符
本节使用最简单的代码解释Python最基础的理论,即print()函数与转义字符的使用。
(1) 如何让计算机打印“2024”?
执行命令“print(2024)”,原理是①首先要告诉计算机需要打印“2024”,即在Python命令行输入“print(2024)”;②然后,Python把代码“print(2024)”编译成计算机能识别的机器语言;③计算机执行命令,打印“2024”并输出在计算机屏幕上。print()函数会让计算机识别括号里的内容,当计算机成功识别括号里的内容,则打印内容。当成功识别运算结果,则打印运算结果。

(2) 如何让计算机打印“细猪技术”与“hello world” ?
执行命令“print("细猪技术")”(或“print('细猪技术')”)和“print('hello world')”,即可打印输出“细猪技术”与“hello world”,原理同(1)。友友们可能疑惑,为什么多了一对双引号或单引号呢?这是因为计算机语言只能识别数字与数学运算,无法理解文字与字母单词。数字和数学运算是标准化、有固定格式的,而文字却能够千变万化。引号属于print()的函数结构,可以包含文字、英文和数字。当括号内有引号的时候,就相当于告诉计算机不需要理解,只需原样打印输出引号中的内容。

(3) 如何让计算机计算1+1并输出计算结果?
执行命令“print(1+1)”或“print(1+1)#计算1+1”,原理同(1)。因为 “1+1” 是计算机能直接识别的数学运算,所以会直接计算并打印最终的运算结果“2”而不是“1+1”。在括号内没有引号的情况下,括号内应该放入计算机能够识别的内容。友友们也可能疑惑,“print(1+1)#计算1+1”中的“#计算1+1”是什么?有什么作用?在Python、R语言和C语言中,“#”常用作单行注释符号,用于解释单行代码,比如“#计算1+1”中的“#”是注释符号,“计算1+1”是用于解释说明的文字。“#”符号后边的任何内容是给执行代码的人看的,用于辅助理解代码,不会被计算机读取也不会被输出。

(4) 如何让计算机打印“我是谁,
我从哪里来,
我要到哪去。”?
执行命令“print('''我是谁,
我从哪里来,
我要到哪去。
''')” ,原理同(1)。

print()函数使用三引号''' '''来实现跨行输出。三引号是英文输入法下的三个单引号!让灵魂拷问的每一个逗号后面都换行显示,打印出“自动换行”的效果。在Python中,默认所有正确的语法,包括标点符号都是英文输入。计算机无法识别中文标点符号,会报错(syntax Error:invalid syntax,语法错误:无效语法)。
(5) 如何用其他方法让计算机打印“我是谁,
我从哪里来,
我要到哪去。”?
执行命令“print('我是谁,\n我从哪里来,\n我要到哪去。')”,原理同(1)。

第二种换行办法是使用转义字符\n实现的。转义字符的特征是反斜杠“\”+转义内容英文缩写首字母,比如换行\n代表【+newline】,退格\b代表【+backspace】,回车\r代表【+return】。
常见的转义字符有\a(响铃)、\b(退格)、\f(换页)、\n(换行)、\r(回车)、\t(水平制表)、\v(垂直制表)、\\(代表个反斜线字符"\")、\’(代表一个单引号(撇号)字符)、\’’( 代表一个双引号字符)、\0(空字符NUL)、\ddd(1-3位八进制所代表的任意字符)、\xhh(1-2位十六进制所代表的任意字符),注意互换斜杠"/"与反斜杠"\"不可相互替代。
(6) 变量赋值
“name='细猪技术'”是一个变量赋值动作,意思是把“细猪技术”赋值给了“name”变量。如果依次执行“name='细猪'”、“name='技术'”和“print(name)”,计算机会输出什么结果呢?

输出是“技术”,为什么呢?执行“name='细猪'”命令将“细猪”赋值给了“name”变量,相当于将'细猪'物品放到了name盒子中,此时name盒子里就是'细猪'物品,一个变量盒子里只能放一个物品。执行“name='技术'”命令意味着将'细猪'物品从name盒子取出,放入'技术'物品,此时name盒子里就是'技术'物品,使用print()函数读出的内容自然就是'技术'。变量存储的数据是可以随意变化的,存储容量仅为1。当多次赋值以后,变量名会指向最新的赋值内容。对于变量的命名规范,包括只能是一个词,只能包含字母、数字和下划线,不能以数字开头,尽量描述包含的数据内容,不要使用Python函数名或关键字。比如说,如果信息是姓名,那么变量可以命名为name;如果信息是数字,那么变量名则应该叫做number。新手习惯给变量命名为a、b、c等简单字母,此类变量名会使判别变量内容变得困难。在代码世界中,赋值符号“=”不是等于号,仅表示赋值动作,把右边的物品放到了左边的变量盒子中。
二、字符串(str)、整数(int)和浮点数(float)
Python世界可以看作部分现实世界的镜像,部分现实世界的概念都可在Python世界里找到对应物,比如现实世界中最常见的数字、文字和符号在Python世界就是数据。在现实世界的镜像(Python)里,最常用的数据类型是字符串(str)、整数(int)和浮点数(float)。
(1) 字符串
字符串(string,str)的识别方式非常简单,即带有引号。只要是被单/双/三引号括起来的内容,不论中文、英文还是拉丁文,统统都是字符串类型。'2024'、"细猪技术"都属于字符串类型。字符串是由一个个字符串起来的组合,字符可以是一个数字、一个字母、一个文字或一个符号。字符串可以表达现实世界里的任意词、语句和表达式。依次执行下列命令,感受字符串对字符表达的无所不能。
about = '细猪技术'
dododo = "xizhujishu"
number = "666"
mixture = '细猪技术xizhujishu666'
print(about)
print(dododo)
print(number)
print(mixture)

(2) 整数
整数(integer,int)是指正整数、负整数和零的统称,是没有小数点的数字。Python的整数和现实世界数学中定义相同。整数不被引号括住,一旦与中文、英文等其他字符连接在一起进行print()就会报错。
(3) 浮点数
数学意义上的小数在Python中以浮点数(float)来表示,没有缩写。浮点数非常好识别,即比整数多了一个小数点。与永远精确的整数运算不同,计算机里浮点数的运算存在来源于四舍五入误差。执行命令“0.35+0.1”,看看结果如何?

与传统认知(0.35+0.1=0.45)不同,为什么“0.35+0.1= 0.44999999999999996”。因为Python计算浮点数时,会先把输入的十进制数0.35和0.1转化成二进制数形式,见下式。
0.35(十进制) = 0.010110011001100110011001100110011001100110011001100111 (二进制)
0.1(十进制) = 0.0001100110011001100110011001100110011001100110011001101 (二进制)
在进制转化过程中可能存在误差,造成常规计算与程序计算结果的差异。然后,以二进制数进行二进制法则运算后,再把二进制运算结果转化为十进制形式输出,二进制转化十进制也可能产生误差。二进制数由0和1组合表示,逢二进一,比如十进制的1,2,3,4分别表示为二进制的001,010,011,100。
(4) 为什么高级编程语言通常不是二进制语言,而编程语言必须编译成二进制的机器语言才可以被计算机执行呢?
因为编程语言是由人编写,由人查看和由人操作执行的,自然是越简单明了越好,但是二进制显然不是人们日常能够使用的语言,商店的货物价格会写“10元(十进制)”而不是“1010元(二进制)”。反之,常规计算机的逻辑硬件与数字电路都是按二进制设计的。二进制的优势在于①技术实现简单,计算机的逻辑硬件电路通常只能表现为通路或断开,恰好也可以用“1”和“0”表示。②运算规则简单,二进制数运算组合少,有利于降低计算机硬件结构要求,提高运算速度。③符合逻辑运算,逻辑代数是逻辑运算的基础,二进制仅有0和1两个数,与逻辑代数中的“真-假”、“是-否”和“开-关”相匹配。④进制转换简单,二进制与十进制互相转换简单快速。⑤抗干扰能力强,每个数据都只有两个状态(0或1),受干扰导致识别错误的概率非常小。
(5) 算术运算符号
Python里的整数、浮点数和数学意义的整数、小数是一样的,它最重要的作用是与运算符号结合,进行数学计算。常见的Python算术运算符号包括+(加)、-(减)、*(乘)、/(除)、%(取模,返回除法运算的余数)、//(取整除,返回商的整数部分)、**(幂、返回X的Y次幂)。Python世界的运算优先级与现实的计算优先级相同,即从左到右顺着来,括号里的优先算,先乘除后加减。我们来验证一下上述的算术运算符号与运算规则。

(6) 拼接符号
“+”符号不仅有算术运算符号意义“加”,也是一个拼接符号,有数据拼接与整合的作用。依次执行命令“who = '我'”、“do= '是'”、“name = '细猪'”、“print(name +do+ who)”和“print(who +do+ name)”,体验一下拼接符号。

(7) type()函数查看数据类型
Python的type()函数是一个简单实用的数据类型查询函数。依次执行命令“when= '今年'”、“do= '是'”、“time = 2024”、“print(type(when))”、“print(type(do))”和“print(type(time))”查看'今年'、'是'和2024分别是什么数据类型。

(8) 数据转换
str()、int()和float()是3个用于数据类型转换的函数,str()函数将其他数据类型转换成字符串,int()函数将其他数据类型转换成整数、float()函数将其他数据类型转换成浮点数。字符串、整数和浮点数相互转换的简要规则见下图。

依次执行命令“when= '今年'”、“do= '是'”、“time = 2024”、“print(when +do+ str(time))”、print(when +do+ ' 2024 ') 、print(when+do+ ' time ') 和print(type(when +do+ ' 2024 ')),查看str()与''的效果区别。可见,将变量名time放进引号里强制转换为字符串的是变量名本身(time),而不是变量名所代表的数字2024,所以切勿将str()与''混用。

根据Python的语法规则,文字形式和小数形式的字符串不能使用int()函数强制转换,只有符合整数规范的字符串类数据才能被强制转换,浮点数可以被int()函数强制转换。int()函数对于浮点数的取整处理不同于小数的四舍五入法,int()函数直接去除小数部分。依次执行命令“print(int(str(细猪技术)))”、“print(int(str(3.5)))”、 “print(int(str(3)))”和“print(int(3.8))”,了解int()函数使用规则。

三、if条件函数
本文具体介绍if函数、if....else函数、if…elif…else…函数和if嵌套函数的用法。
(1) if函数
条件判断是计算机沟通的一种逻辑语句,即让计算机明确地知道,在什么条件下,该去做什么。如果要用代码来实现沟通“如果……就……”,可以用单向条件判断语句中的if函数来表述。依次执行代码“studytime =6 #你每日学习6小时”、“if studytime >=6: print('你是学习达人') #如果你每日学习时间大于等于6小时,那么'你是学习达人'”,见下图演示。

逻辑:第一行代码用赋值运算符“=”将6赋值给studytime(你每日学习6小时),然后给出if执行条件,满足条件studytime>=6就执行if条件下的命令,即用print()命令打印出条件判断结果“你是学习达人”。
条件判断命令中的冒号后存在一个空格,有什么作用?在计算机世界中,空格的学名为缩进,缩进是4个空格或1个Tab键。对于Python而言,冒号和缩进是一种语法,能够帮助区分代码块层次与理解条件执行的逻辑。在if条件函数中,当使用英文输入法输入冒号“:”后敲击回车键,Python编写程序会自动在下一行代码向右缩进。print()函数被整合到if条件语句中,组成了一个整体代码块。计算机是逐行往下执行代码的,所以当上行的if条件不满足时,就自动忽略执行if条件下的内部命令,继续执行下一行命令。
(2) if....else函数
如果要用代码来实现沟通“如果……不满足条件,就......”,可以用双向条件判断语句的if....else函数来表述。即如果满足if条件,执行if下的命令,如果不满足if条件,就执行else下的命令,if和else所代表的是条件是互斥的。依次执行代码“studytime =3 #你每日学习3小时”、“if studytime >=6: print('你是学习达人') #如果你每日学习时间大于等于6小时,那么'你是学习达人'”、“else: print('请加强学习')#如果你每日学习时间不足6小时,那么'请加强学习'”,见下图演示。

逻辑:用赋值运算符将3赋值给studytime(你每日学习3小时),如果满足if执行条件(studytime>=6),就执行if命令,即print出 “你是学习达人”,不满足条件就执行else命令,即print出“请加强学习”。
(3) if…elif…else…函数
在判断3个或3个以上的条件时,可以使用多向判断命令if…elif…else…,即判断是否满足if的条件,满足执行if命令,不满足就判断是否满足elif的条件,满足执行elif命令,不满足就执行else命令。当判断条件超过3个,中间的条件都可以使用elif。If、elif和else所代表的条件是互斥的,elif的执行本质上同else一样,所以elif后可以不接else。依次执行代码“core =59 #你考试得分59”、“if core>=90: print('成绩优异')#如果大于等于90分,你的成绩是优异的”、“elif core>=80: print('成绩优良')#如果大于等于80分,你的成绩是优良的”、“elif core>=60: print('成绩合格')#如果大于等于60分,你的成绩是合格的”和“else: print('成绩不合格')#如果小于60分,你的成绩是不合格的”,见下图演示。

逻辑:将成绩59赋予core变量, 如果满足core大于等于90分,就判定成绩优异,不满足则看core是否大于等于80分,满足就判定成绩优良,不满足则看core是否大于等于60分,满足就判定成绩合格,否则就判定成绩不合格。
(4) if嵌套
if嵌套即是在一个if…else…条件函数(一级)下再嵌套一个if...else...条件函数(二级)。在给定一个假设前提上,如果满足一级if条件,则执行一级if条件命令及其下嵌套的二级if...else...条件函数,而一级else命令及其下嵌套的if...else...条件函数不执行。同理,如果不满足一级if条件,则执行一级else命令及其下的二级if...else...条件函数,而一级的if命令及其下嵌套的if...else...条件函数不执行。同级(一级或二级)的if条件与else条件是互斥的,嵌套在一级if条件下的二级if...else...条件函数的执行条件是满足一级if条件,嵌套在一级else条件下的二级if...else...条件函数的执行条件是满足一级else条件。计算机执行命令的顺序是由上到下,由左到右。缩进相同的命令处于同一个等级,在命令行窗口执行以下代码。
studytime =1
if studytime >=6:
print('你是学习达人')#输入代码前敲击1次table键
if studytime >=8:
print('你是超级学习达人') #输入代码前敲击2次table键
else:
print('你是超级学习达人候选人')
else:
print('请加强学习')
if studytime >=4:
print('你是学习达人候选人')
else:
print('你是学习达人候选人的候选人')

逻辑:将1赋值给studytime(你每日学习1小时),判断不满足一级if执行条件(studytime>=6),执行一级else条件命令,即print出 “请加强学习”。继续执行一级else条件下的二级if...else...条件函数,判断不满足二级if执行条件studytime>=4,执行二级else条件命令,即print出“你是学习达人候选人的候选人”。
四、input()函数
(1) input()函数的应用
input()函数是输入函数,是用来收集信息的。当在input()函数括号内输入问题时,函数会将此问题原样显示在屏幕上,并在终端区域等待针对此问题的回答。如果问题没有被回答,input()的输入通道会保持开启状态,而当输入答案后,输入通道便会关闭。即有问有答,有来有往。执行命令“who= input('请在以下四个选项<我是学习达人候选人的候选人;我是学习达人候选人;我是超级学习达人候选人;我是超级学习达人>中,输入你的状态:') ”,然后输入答案“我是超级学习达人”并执行,执行命令“print(who)”。

逻辑:针对input()函数提供的四个选项<我是学习达人候选人的候选人;我是学习达人候选人;我是超级学习达人候选人;我是超级学习达人>,输入答案(我是超级学习达人),并将input()函数的执行结果(输入答案)赋值给变量who。函数要好用,赋值少不了,input()函数的结果必须赋值。可见,赋值给name变量的内容不是input()函数中提的问题,而是收集到的答案。只要是针对input()函数所提问题的回答,都会被存储在赋值变量中,当打印变量时,将回答(输入值,输入给函数的内容)提取输出。input()函数常见用法有函数结果赋值(some=input())、针对问题收集信息(some=input('具体问题'))和输出结果(print(some))。
(2) input()函数的输入数据类型
对于Python3来说,input()函数无论输入的回答是整数或字符串,input()函数的输入值都会被转换为字符串类型。在Python3编程程序中,依次输入并执行“number = input('请选择1或2:')”、“1”和“print(type(number))”;“choice = input('请选择去或留:')”、“留”和“print(type(choice))”;“about = input('请选择good或bad:') ”、“good”和“print(type(about))”,根据输出结果来验证上述说法。

逻辑:在Python3中,input()函数无论输入的是整数“1”、字符串“good”或文字“留”,全部都会被强制地转换为字符串类型str。很显然,将获取的字符串数据赋值给变量,变量也必然是字符串类型。
然而,不是所有情况都是一样的!尝试在Python2中执行上述代码,查看区别。

逻辑:在Python2中,input()函数输入的整数“1”,输出值仍然是整数型int。input()函数在输入时不能直接输入字符串“留”或“good”,而是应该带上英文格式的引号,即“'留'”或“'good'”,才能够被读取输入。原因是Python2里没有主动eval,使用eval(input())能够达到相同的效果,即input() = eval(raw_input())。
(3) input()函数结果的强制转换
如果有输入值存在大量整数数据,逐个转换数据类型是非常吃力的,将所有输入值的数据类型一次性全部转换为整数是一个可行的办法。input()函数的某些输入值是可以变为整数的,考虑使用int()函数在input()函数的源头将输入的数据转换为整数。将input()函数的输出数据转换成整数类型后赋值给choice变量,即使嵌套在if()函数中也能够准确运行。依次输入并执行“choice = int(input('请输入一个数:')) ”、“1”和“print(type(choice))”,查看数据类型转换效果。

一、基础函数
(1) print()
打印括号中的内容。当括号内容不带引号,即让计算机理解括号里的内容并打印输出最终结果,通常是整数或浮点数的数学运算,例如“print(1.3+3.1)”;当括号内容带单引号,计算机只需原样复述引号中的内容,例如“print('学习Python的第99天')”;当括号内容带双引号,作用同单引号。如果打印内容中有单引号时,必须使用双引号,例如“print("Let's go")”。使用单引号会报错,错误示例见“print('Let's go')”。如果使用转义字符 (\')来实现打印内容的单引号,允许单引号括住,例如“print('Let\'s go')”。当括号内容带三引号,可以根据三引号中内容格式实现换行,使用转义字符"\n"也可以换行,例如“print('''学习Python \n成就未来''')”。转义字符在Python中应用广泛,常见的转义字符有\a(响铃,BEL)、\b(退格,BS,将当前位置移到前一列)、\f(换页,FF,将当前位置移到下页开头)、\n(换行,LF,将当前位置移到下一行开头)、\r(回车,CR,将当前位置移到本行开头)、\t(水平制表,HT,跳到下一个Tab位置)、\v(垂直制表,VT)、\\(代表个反斜杠字符"\")、\'(代表一个单引号字符)、\"( 代表一个双引号字符)、\0(空字符,NUL)、\ddd(1-3位八进制所代表的任意字符)、\xhh(1-2位十六进制所代表的任意字符)、\?(代表一个问号),注意互换斜杠"/"与反斜杠"\"不可相互替代。
(2) input()
number = input('请输入你的编号:'),使用number变量赋值来获取input()函数输入的编号信息。变量的命名规则是仅有一词,仅含字母、数字或下划线,不能以数字开头,描述尽量关联数据内容和禁用python函数名和关键字。例如“number = 12”、“name = 'xizhujishu'”和“list_name = ['a','xiang','xizhujishu','aa']”。Python3中常用关键字有False、None、True、and、as、assert、async、await、break、class、continue、def、del、elif、else、exceptfinally、for、from、global、if、import、in、is、lambda、nonlocal、not、or、pass、raisereturn、try、while、with和yield,在设置变量时注意避开。
(3) if条件函数
单向条件判断,如果条件成立,就执行if语句。告诉计算机,在什么条件下,该去做什么。依次执行“number = 9”和“if number > 5: print(number)”。注意,if条件后面要加冒号,换行的执行语句要缩进4个空格或1个Tab。
(4) if…else…双向判断条件函数
双向判断,条件成立执行if语句,否则执行else语句。依次执行命令“number = 6”、“if number >= 9: pirnt(number)”和“else: print('number<9')”。Else必须要有同级前提条件,if和else属于同级条件。else分行不需要缩进,但if和else下的执行语句都需要缩进1个Tab。注意,if…else…函数在满足一个条件后就不会继续执行其他条件判断,if代表的条件和else代表的条件是互斥的。if…if…函数会任何条件下,都会逐个遍历所有条件。
(5) if…elif…else多向判断条件函数
多向判断条件函数,三个或三个以上条件的判断。elif 必要if,非必要else。依次执行命令“core =59”、“if core>=90: print('成绩优异')”、“elif core>=80: print('成绩优良')”、“elif core>=60: print('成绩合格')”和“else: print('成绩不合格')”。
(6) if嵌套函数
在一个if…else…条件函数下再嵌套一个if...else...条件函数。在一个给定假设前提上,如果满足一级if条件,则执行一级if条件语句及其下嵌套的二级if...else...条件函数,而一级else语句及其下嵌套的if...else...条件函数不执行。同理,如果不满足一级if条件,则执行一级else命令及其下的二级if...else...条件函数,而一级的if命令及其下嵌套的if...else...条件函数不执行。嵌套写法推荐扒洋葱式写法,即先写最高级条件,再写高级条件下的附加条件。计算机执行命令的顺序是由上到下,由左到右。缩进相同的命令处于同一个等级,执行以下代码。
studytime =1
if studytime >=6:
print('你是学习达人')#输入代码前敲击1次table键
if studytime >=8:
print('你是超级学习达人') #输入代码前敲击2次table键
else:
print('你是超级学习达人候选人')
else:
print('请加强学习')
if studytime >=4:
print('你是学习达人候选人')
else:
print('你是学习达人候选人的候选人')
二、数据类型与操作
(1) 数据类型
Python常见的数据类型有字符串(str)、整数型(int)、浮点数(float)、列表(list)、字典(dictionary,dice)、布尔值(bool)和元组(tuple),其中字符串、整数、浮点数是最基本的数据类型。字符串是用括号括起来的文本,如'Python666'。整数是不带小数点的数字,如666。浮点数是带小数点的数字,如6.66,浮点数运算可能存在误差。列表是一种有序集合,可以随时增减其中元素,标识是中括号“[]”。元组类似于列表,但不能被修改。字典是使用键值对(key-value)作为存储方式的数据类型,标识是大括号{}。布尔值是表示真假的数据类型,只有True和False。
(2) 字符串拼接
① 使用 ' + ' 进行字符串的拼接,依次执行命令“print('学习'+'Python')”、“do = '学习'”、“what = 'Python '”和print(do +what);
② 使用 ' % ' 进行字符串的拼接,依次执行命令“do = '学习'”、“what = 'Python'”、“print('如何%s%s'%(do,what))# %s针对字符串,%d是针对整数或浮点数”。
(3) 四则运算符号
常见的Python四则运算符号包括+(加)、-(减)、*(乘)、/(除)、%(取模,返回除法运算的余数)、//(取整除,返回商的整数部分)、**(幂、返回X的Y次幂)。Python世界的运算优先级与现实的计算优先级相同,即从左到右顺着来,括号里的优先算,先乘除后加减。
(4) type()函数
查看变量的数据类型。依次执行命令“name = 'xizhujishu'”和“print(type(name))”,结果显示这是一个字符串类型的数据
(5) 数据类型转换命令
str()将其他数据类型强制转换为字符串,依次执行命令 “number = 1”、“fruit = '个菠萝'”和“print(type(name + str(number) +fruit))”,结果显示
三、数据的常用语法
(1) 列表操作
列表操作分为对列表元素的处理和对列表的处理,两种处理都包括提取、修改、增加和删除。偏移量是对列表元素的位置编号,列表的偏移量从0开始计算。
① 列表元素的提取。使用切片形式[a:b]从列表层面提取若干个元素,即从a到b的元素提取出列表,但不包括b(a <= X < b)。冒号某侧没有数字,则全取。依次执行命令“list = ['a','b','c','d']”、“print(list[0])” 、“print(list[1:2])”和“print(list[:4])”,输出结果是“a”、“['b']”和“['a','b','c','d']”;
② 嵌套列表的提取。执行命令“list = [['ab','adc'],['xy','xyz'],['85','857']]”和“print(list[0] [1])”,输出结果是“abc”;
③ 列表元素的修改。执行命令“list = ['a','b','c']”、“list[0] = 'd'”和“print(list)”,输出结果是“['d','b','c']”;
④ 列表元素的增加。append()函数可以添加一个元素到列表末尾,执行命令“list = ['a','b']”、“list.append('c')”和“print(list)”,输出结果是“['a','b','c']”。常见错误有Ⅰ.不能用append对列表赋值,执行命令“list = ['a','b']”、“list =list.append('c')”和“print(list)”,报错信息是“None”。Ⅱ.append后面是小括号,而非中括号。“list = ['a','b']”、“list.append['c']”和“print(list)”,报错信息是“TypeError: 'builtin_function_or_method' object is not subscriptable”。Ⅲ.append不能一次添加多个元素。执行命令“list = ['a','b']”、“list.append('c','d')”和“print(list)”,报错信息是“TypeError: append() takes exactly one argument (2 given)”;
⑤ 列表元素的删除。每次只能删除一个元素,连续删除元素时,要重新计算偏移量。执行命令“list = ['a','b','c']”、“del list[0]”、“print(list)”、“del list[0]”和“print(list)”, 输出结果是['b','c']、['c'];
⑥ 列表的修改。对列表的赋值语句,执行命令“list = ['a','b','c']”、“list[:] = ['def']# 将列表的所有元素取出来”和“print(list)”,输出结果是“['def']”。“list = ['a','b','c']”、“list[:] = 'def'”和“print(list)”,输出结果是“['d', 'e', 'f']”;
⑦ 列表的增加/合并。符号'+'不能用在列表和元素混合合并中,执行命令“list1 = ['a']”、“list2 = ['b']”、“list3 = ['c']”、“list = list1 + list2 +list3”和“print(list)”,输出结果是“ ['a','b','c']”;
⑧ 列表的删除。执行命令“list = ['a','b','c']”、“del list[:2]”和“print(list)”,输出结果是“ ['c']”。
(2) 字典语法
① 字典数据使用键提取。执行命令“group = {'A':'a', 'B':'b', 'C':'c'}”和“print(group['A'])”,输出结果是“a”;
② 字典数据的修改。执行命令“group = {'A':'a', 'B':'b', 'C':'c'}”、“group['A']='x'”和“print(group)”,输出结果是“{ 'A': 'x', 'B': 'b', 'C': 'c'}”;
③ 字典数据的增加。“group = {'A':'a', 'B':'b', 'C':'c'}”、“group['D']='d'”和“print(group)” ,输出结果是“{'D': 'd', 'B': 'b', 'A': 'x', 'C': 'c'}”;
④ 字典数据的删除。执行命令“group = {'A': 'a', ' B ': 'b', 'C': 'c'}”、“del group['A']”和“print(group)”,输出结果是“{'B':'b', 'C':'c'}”;
⑤ dict.keys()#以元组的形式提取出字典中的所有键,使用list()函数将元组转化为列表形式。执行命令“group = {'A': 'a', ' B ': 'b', 'C': 'c'}”和“print(group.keys())”,输出结果是“dict_keys(['A', 'B', 'C'])”。执行命令“group = {'A': 'a', ' B ': 'b', 'C': 'c'}”和“print(list(group.keys()))”,输出结果是“['A', ' B', 'C']”;
⑥ dict.values()提取字典中所有的值。执行命令“group = {'A': 'a', ' B ': 'b', 'C': 'c'}”和“print(group.values())”,输出结果是“dict_values(['a', 'b', 'c'])”;
⑦ dict.items()提取字典中所有的键值对。执行命令“group = {'A': 'a', ' B ': 'b', 'C': 'c'}”和“print(group.items())”,输出结果是“dict_items([('A', 'a'), (' B ', 'b'), ('C', 'c')])”。
(3) 产生布尔值的表达式与运算符
① 使用print(bool()) 检查数值的真假,值本身作为条件,假条件(False)有0(数字)、''(空字符串)、[](空列表)、{}(空字典)和None,其他都是真的(True);
② 常见的产生布尔值的比较运算包括等于“==”、不等于“!=”、大于“>”、小于“<”、大于等于“>=”和小于等于“<=”,当比较运算符两侧值使得(不)等式成立,条件为真。比如,等于号两侧的值相等,条件为真,比较运算符产生布尔值True。注意,运算符之间不用空格,不可以写成“= =”或“> =”;
③ 成员运算产生布尔值。常见的成员运算符包括属于“in”和不属于“not in”。对于“a in A”,如果a值在A序列里,条件为真;
④ 逻辑运算产生布尔值。常见的逻辑运算符包括且“and”、或“or”和非“not”。“and” 连接两个布尔值,如果两个都为真,该条件才为真。“or” 连接两个布尔值,如果有一个为真,该条件即为真。“not”属于反逻辑状态,a为True,not a则为False,反之亦然。
(4) for循环
① for循环,基本格式是for…in…
for d in 'coding': print(d) #遍历字符串
for c in ['for','change'] : print(c) #遍历列表
for…in dict#遍历字典的键,执行命令“list = {1:'a',2:'b',3:'c'}”和“for i in list: print(i)”。for…in dict.values() #遍历字典的值,执行命令“list = {1:'a',2:'b',3:'c'}”和“for i in list.values():print(i)”。for…in dict.items() #遍历字典的键值对,执行命令“list = {1:'a',2:'b',3:'c'}”、“for k, v in list.items():print(k,v)”。
② range()函数
range()最基本用法包括range(b), range(a,b)和range(a,b,c)。函数中,a表示计数从a开始,无a时表示从0开始;b表示计数到b结束,但不包括b;c表示计数的间隔,默认为1。
range(3) #计数依次为0、1、2
range(2,5) #计数依次为2、3、4
range(2,6,2) #计数依次为2、4
for…in range()函数语句执行指定次数的循环,执行语句“for i in range(100): print('学习Python的第%d天' %i)”将循环100次停止。
③ while循环
当条件为真时,执行循环语句,只要条件一直为真,循环便会持续。while循环和for循环的区别在于for擅长处理固定次数,自动遍历各序列。while处理不定次数的循环,条件为False便停止。执行下列命令,体验while循环。
count = 6
while count > 1:
print('coding')
count = count -2
④ 高级循环
如果满足条件,break就结束循环。执行下列命令,体验break威力。如果只有前两行代码,会无限循环打印“coding”。
while True:
print('coding')
break
# 对比while循环的例子,执行下列命令,只能打印2次coding
count = 6
while count >1:
print('coding')
count = count - 2
if count < 2: # 当count小于2,停止循环
break
⑤ continue # 如果满足条件,则跳过当前循环的剩余语句,直接开始下一轮循环
count = 6
while count >2:
print('coding')
count = count - 2
if count == 2: # 当count等于2的时候,跳过下列语句,重新开始新的一轮循环
continue
print('hard coding') # 由于continue语句,coding只会打印一次
⑥ else # 无论是否进入循环,最后都会执行esle语句,除非执行break语句跳出循环
count = 6
while count >2:
print('学习Python')
count = count -2
else: # 无论是否进入循环都会执行else语句
print('很快乐')
⑦ 循环嵌套,即循环中有循环
for i in ['学习','快乐']: # 首先遍历列表元素
for t in i: # 然后遍历元素(字符串)
print(t)
四、函数
函数是组织好的、可以重复使用的、用来实现单一功能的代码,可分为自定义函数和内置函数。
(1) 自定义函数
自定义函数是需要自己定义,而内置函数是python已经定义好的函数,比如print()、input()等。函数定义的语法包括def(定义函数)和return(函数返回值)。函数定义的格式见下式:
def 函数名(参数):
函数体
return 语句
# 新建一个函数“y = x + 6”,实现“math_func(6)=12”。
def math_plus6(x):
y = x + 6
print(y)
return y
(2) 内置函数
访问官网https://docs.python.org/zh-cn/3/library/functions.html查看Python内置函数功能,内置函数包括abs()、all()、any()、ascii()、bin()、bool()、breakpoint()、bytearray()、bytes()、callable()、chr()、classmethod()、compile()、complex()、delattr()、dict()、dir()、divmod()、enumerate()、eval()、exec()、filter()、float()、format()、frozenset()、getattr()、globals()、hasattr()、hash()、help()、hex()、id()、input()、int()、isinstance()、issubclass()、iter()、len()、list()、locals()、map()、max()、memoryview()、min()、next()、object()、oct()、open()、ord()、pow()、print()、property()、range()、repr()、reversed()、round()、set()、setattr()、slice()、sorted()、staticmethod()、str()、sum()、super()、tuple()、type()、vars()、zip()、__import__()。例如,变量作用域可视为变量作用的范围,全局变量(Global,G)是指在全局内有效的变量,局部变量(Local,L)是指只能在函数内或者一定代码块内生效的变量,global()将局部变量转化为全局变量。
五、类与对象
类是指具有相同属性和方法的对象的抽象,实例是指类的个例,对象是指类和实例的集合,类可以看作是对象,实例也可以看作是对象。
(1) 使用class定义类,类名需要大写
① 定义类
class MyClass: # 定义类MyClass
i = 12345 # 定义类的属性(变量)
def f(self): # 定义类的方法
return('hello world') # 执行方法返回'hello word'字符串
② 实例测试
x = MyClass() # 创建类的实例x
print(x.i) # 打印实例x的属性
print(x.f()) # 打印实例x的f方法
(2) class A(B)
定义B类的子类A类,A类具有B类的属性和方法, B类也称为A类的父类
class SecondClass(MyClass):pass # 定义SecondClass是MyClass的子类,SecondClass可以调用MyClass的属性和方法
x = SecondClass()
print(x.i)
print(x.f())
(3) class A(B, C)
多重继承,A类是B类和C类的子类,A类在调用属性和方法的时候,会优先调用位于左侧的类
class B:i = 123 # B类的属性是i=123
class C:i = 12345 # C类的属性是i=12345
class A(B,C): pass # A类是B类和C类的子类
x = A() # 创建A类的实例x
print(x.i) # 调用属性,会优先调用B类的属性
(4) def __init__(self):
创建类的初始化方法,只要调用类,便自动调用初始化方法的语句,常用于创建实例属性
class A:
def __init__(self): # 只要创建实例,便会自动执行初始化方法下的语句
print('hello world')
x = A() # 只要创建实例就会调用方法,打印“hello world”
class A: # 对比以下没有初始化的方法
def f(self):
print('hello world')
x = A() # 不使用初始化方法,创建实例无任何输出
super() # 用于调用父类(超类),在子类的方法里调用父类的方法,使子类可以在继承方法的基础上进行扩展。super()是用来解决多重继承的查找顺序(MRO)、重复调用等问题的,MRO就是类的方法解析顺序表,即继承父类方法时的顺序表。
六、模块与库
模块类型分为内置模块、自定义模块和第三方模块。内置模块是指python官方组织编写和维护的模块,自定义模块是指自己编写的代码块并保存为.py文件,第三方模块是指代码创作者公开的自定义模块。根据模块组织形式,也可分为单个模块文件、模块包和模块库。 模块和模块对象导入方法见下。
① import A # 导入模块A,导入模块后,可以通过<模块名.函数名()>和<模块名.变量名>的方式调用模块里的函数和变量。创建类实例的时候,需要使用<实例名 = 模块名.类名()>进行创建,创建实例后调用类方法和属性可以使用<实例名.函数名()>和<实例名.变量名>;
② import A as a # 导入模块A,并将模块A重新命名为a。调用模块中的类、函数和变量与①操作一样;
③ from A import B # 导入模块A中的对象B,调用对象B中的函数和变量可以不加模块名;
④ from A import B,C,D #导入模块A中的多个对象B、C、D;
⑤ from A import * # 导入模块A中的所有对象;
⑥ if __name__=="__main__":#当.py文件被直接运行时,if __name__=="__main__":之下的代码块将被运行,当.py文件以模块形式被导入时,if __name__=="__main__":之下的代码块不被运行。
七、文件读写
文件读写有三个步骤,包括打开文件、读(写)文件和关闭文件。
(1) open(file, mode, encoding)
打开文件,file是文件路径,encoding是编码格式,mode是读写模式。读写模式mode包括r(只读,文件不存在就报错)、rb(二进制只读,文件不存在就报错)、r+(可读可写,文件不存在就报错,文件存在就覆盖)、rb+(二进制读写,文件不存在就报错,文件存在就覆盖)、w(只能写,文件不存在就创建文件,文件存在就覆盖)、wb(二进制只写,文件不存在就创建文件,文件存在就覆盖)、w+(可读可写,文件不存在就创建文件,文件存在就覆盖)、wb+(二进制读写,文件不存在就创建文件,就覆盖)、a(不能读,可以追加写入,文件不存在就创建文件,文件存在就追加写入)、ab(二进制不能读,可以追加写入,文件不存在就创建文件,文件存在就追加写入)、a+(可读写,文件不存在就创建文件,文件存在就追加写入)、ab+(二进制可读写,文件不存在就创建文件,文件存在就追加写入)。例如f = open('/card.csv', 'r+', encoding = 'UTF-8')。
(2) with open() as…
本方法打开文件,可以不使用close()关闭文件,例如with open('/card.csv ', 'r+', encoding = 'UTF-8') as f
(3) read() # 读取文件内容
① with open('/card.csv ', 'r+', encoding = 'UTF-8') as f
② content = f.read() # 以字符串形式读取文件内容,并赋值给变量content
③ readlines() # 以列表的方式读取文件内容
④ content = f.readlines() # 以列表形式读取文件内容,并赋值给变量content
(4) write()
清空文件内容,并写入字符串入内容
① with open('/card.csv ', 'r+', encoding = 'UTF-8') as f
② f.write('python')
(5) writelines()
清空文件内容,以列表的方式写入
① with open('/card.csv ', 'r+', encoding = 'UTF-8') as f
② f.write('python')
(6) close() # 关闭文件
(7) csv文件读写
① reader() # 读取csv文件
② import csv # 导入csv模块
③ with open(' card.csv') as f:
card = csv.reader(f) # 读取csv文件,将文件内容赋值到card
④ writer() # 将内容写入csv文件
Ⅰ.writerow() # 写入一行内容
Ⅱ.writerows() # 一次写入多行csv文件
import csv # 导入csv模块
with open('card.csv','r+',newline = '') as f:
writer = csv.writer(f) # 写入csv文件
writer.writerow(['学习Python ','成就梦想']) # 写入一行内容
data = [['数据类型','要区分'],['数据转换','要记牢']]
writer.writerows(data) # 写入多行内容
(8) os模块
os.getcwd() # 返回当前的工作目录
八、消除程序错误debug
使用try…except…语句处理以下问题
for i in range(6):
try:
print(6/i) # 使用6依次除于0、1、2、3、4、5,并打印
except ZeroDivisionError # 如果发生ZeroDivisionError类型的错误,执行下列语句
print('0是不能做除数的!')
九、小技巧补充
(1) str.spilt()
# 返回一个由字符串内单词组成的列表
'11?22?33'.split('?') # 对字符串'11?22?33'按分隔符'?'进行切割
'11?22?33'.split('?',1) # 对字符串'11?22?33'按第一个分隔符'?'进行切割
(2) random模块
import random # 导入random随机模块,然后再调用相应方法
print(random.randint(1,100)) # 产生1到100的一个整数型随机数
print(random.random()) # 产生0到1之间的随机浮点数
print(random.uniform(1,5.4)) # 产生1到5.4之间的随机浮点数,区间可以不是整数
print(random.choice('python')) # 从序列中随机选取一个元素
print(random.randrange(1,100,2)) # 生成从1到100的间隔为2的随机整数
(1) 代码等于号“=”或大于号“>”两边要不要空格,有影响吗?
没有影响,但是推荐加上空格,更加规范美观,增强辨识度。注意,大于等于“>=”和小于等于“<=”等符号的中间不能有空格。
(2) 单引号、双引号、三引号的异同点是什么?
使用单引号、双引号和三引号都可以定义字符串,单引号、双引号定义的字符串必须在一行,三引号定义的字符串可以分布在连续的多行,即三引号可以将引号内的所有内容与内容格式打印出来。
(3) 运行报错通常是什么原因?
Python代码执行报错通常是人为因素,很少是Python本身的bug。如果代码报错,应该第一时间查看报错信息与修改代码内容或代码格式。
(4) 整数(int)包括什么?
正整数、负整数和0。
(5) 整数(int)的不同进制如何表示?
十进制即默认的进制,二进制以0b开头,八进制以0o开头,十六进制以0x开头。
(6) 如何解决浮点型(float)数据的储存计算不准确性问题?
可以使用Decimal()函数避免浮点型数据存储计算不准确的问题。导入模块decimal,执行命令“from decimal import Decimal”和“print(Decimal(‘1.35’)+Decimal(‘1.1’))”,输出答案“2.45” 。
(7) 变量经过多次赋值,变量最终变成什么了?
经多次赋值后,变量最终指向最新的赋值内容。
(8) 嵌套if语法结构是怎么样的?
嵌套if语法结构代码模板块见下。
if外层条件表达式:
if内层条件表达式:
内层条件执行体1
else:
内层条件执行体2
else:
else内层条件表达式:
内层条件执行体3
else:
内层条件执行体4
(9) 为什么代码命令一直处于执行状态?
如果代码内有输入操作语句,代码会一直显示运行中,直到输入内容才结束。如果进入无限循环执行,考虑使用Ctrl+C或Ctrl+Q结束循环。
(10) 如何关闭文件?
使用XXX.close()命令关闭文件,例如xizhujishu.close()#关闭文件xizhujishu。
(11) else后面为什么不可以加执行条件?
else表达的是除之前情况之外的其它所有情况,不必加条件,也不可加条件,加条件可以使用elif。
(12) 布尔值为false的对象有什么?
每个对象都有一个布尔值,使用bool()函数获取对象的布尔值。布尔值为false的对象有false、0(或0.0)、None、空字符串(“”)、空列表([]或lst())、空元组(()或tuble())、空字典({}或dict())和空集合(set()),其他对象bool值都为ture。
(13) 常见运算符有什么?
常见运算符包括括号();算术运算有**、*、/、//、%、+、-;位运算有<<、>>、&、|;比较运算有>、<、>=、<=、==、!=;布尔运算有and(与)、or(或)、not(非)、in(在…中)、not in(不在...中);赋值运算有=;比较运算是对多个变量或表达式结果进行大小、真假比较。注意,>、<、>=、<=、!=和==的比较对象是value,is和is not的比较对象是id,也要注意区分”=”赋值运算符和”==”比较运算符。
(14) if函数分支结构有什么?
if函数分支结构包括单分支结构、双分支结构和多分支结构。单分支结构是“如果...就...”+“条件执行”,代码是“if条件表达式:条件执行体”;双分支结构是“如果...就...否则就...”+“二选一执行”,代码是“if条件表达式:条件执行体1 else:条件执行体2”;多分支结构是“选a?或选b?或选c?或选d?或选e?........”+“多选一执行”,代码是“if条件表达式:条件执行体1 elif:条件执行体2 elif:条件执行体3......elif:条件执行体n elif:条件执行体n+1”。
(15) 布尔(bool)运算符的运算逻辑是什么?
对于and(与),二者都是正确的才是正确的;对于or(或),二者都是错误的才是错误的,其一是正确的就是正确的;对于not(非),即将bool操作数取反;对于in(在...中)或not in(不在...中),即判断(非)包含关系。
(16) 变量定义是什么?有什么使用?
变量可以看作带有标签的盒子,这个盒子只能装一个的东西。变量由标识、类型和值组成,标识表示对象所储存的内存地址,用函数id(变量)来获取;类型表示对象的数据类型,用函数type(变量)来获取;值表示对象所储存的具体数据,用print()函数直接输出。变量指的是对象的标识(内存地址),其与数据类型、值一一对应。
(17) if和else必须同时出现吗?
不一定,if可以单独使用,else也可以和循环一起使用,表达循环外的所有情况。
(18) 为什么print('hello\tworld')与print('helloooo\tworld')输出结果的空格不同,分别是3和4?
因为\t的空格占位符数可能是1~4,取决于\t前面的字母个数。如果前面字母个数是奇数,那么\t占3个;如果前面字母个数是偶数,那么\t占2个。\b、\\和\'用法示例见下。
print('hello\bworld') #输出结果是‘hellworld’,\b是退一个格,把o给退没了
print('http:\\\\www.xizhujishulovecoding666.com') #输出结果是‘http:\\www.xizhujishulovecoding666.com’
print('Python大神:\'ilovecoding\'') #输出结果是“Python大神:'ilovecoding'”,\表明单引号不再是内容边界而是内容本身
(19) 如何让转义字符不起作用?
原字符能够使转义字符不起作用,就是在字符串之前加r或R,示例见下。
print(r'good\rmorning')#输出结果是good\rmorning。注意,字符串最后一个字符不可以是反斜杠\,但是可以出现最后两个字符都是反斜杠。
(20) 赋值运算符的使用规则是怎么样的?
执行顺序是从右到左,支持链式赋值,即x=y=z=6。链式赋值中只有一个对象”6”,但是有三个指向它的被赋值的引用。支持参数赋值,包括+=、-=、*=、/=、//=、%=。执行命令“a=66”、“a+=6#相对于执行a=a+6,即72”、“a-=12#相对于执行a=a-12,即60”、“a*=3#相对于执行a=a*3,即180”和“a/=9#相对于执行a=a/9,即20”。赋值运算符也支持系列解包赋值,注意左边的变量和右边的值的个数要相同,按严格顺序进行赋值,例如a,b,c=6,66,66。解包赋值具有交换功能,例如执行命令“a,b=6,66”、“a,b=b,a”和“print(a,b)”,即66 6。
(21) 如何使用位运算符?
位运算是指将数据转换成二进制后继续计算。与(&)是指对应数位都是1,结果数位才是1。或(|)是指对应数位都是0,结果数位才是0。异或(^)是指对应数位相同为0,相异为1。取反(~)是指0变1,1变0。左移(<<)是各二进位全部左移若干位,高位丢弃,低位补0。右移(>>)是各二进位全部右移若干位,对无符号数,高位补0,有符号数,可能补符号位(算术右移)或补0(逻辑右移)。将十进制数2与16转化为8位二进制数,再进行与(&)和或(|)运算,见下示例。
十进制2 :0 0 0 0 0 0 1 0
十进制16 :0 0 0 1 0 0 0 0
与& :0 0 0 0 0 0 0 0 #print(4&16)=0
或| :0 0 0 1 0 0 1 0 #print(4|16)=18
将十进制数12转化为8位二进制数,再进行左/右移位计算,见下示例。
十进制12: 0 0 0 0 1 1 0 0
左移1位:溢0 0 0 0 1 1 0 0 0补 #左移1位相对于乘以2的1次方,代码“print(12<<1)#24”
左移2位:溢0 0 0 0 1 1 0 0 0 0补 #左移2位相对于乘以2的2次方,代码“print(12<<2)#48”
右移1位 : 补0 0 0 0 0 1 1 0 0溢 #右移1位相对于乘以0.5的1次方,代码“print(12>>1)#6”
(22) 常见的注释类型有什么?
常见的注释类型有单行注释、多行注释和中文编码声明注释。单行注释是以#开头,直到换行结束;多行注释没有特定标记,没有赋值的被三引号括住的内容即是多行注释;中文编码声明注释是文件开头上的中文声明注释,用以指定源码文件的编码格式和更改py文件的存储格式。
(23) int(input())输入小数为什么报错?
input输出的是字符串类型,int()函数无法被识别转换类浮点数字符串(’6.6’)中的小数点,报错。int()只能转换类整数字符串。
(24) 整数、浮点数和字符串的数学运算
整数和浮点数可以加减乘除和混合运算的。如果字符串用加号“+”,便拼成一个新字符串,字符串没有减法和乘除法。
(25) input里面需要加print()吗?
不需要,input()函数括号中的内容可以视为“问题”,运行的时候就会把“问题”打印出来,然后在终端输入“问题”的“答案”即可完成代码执行。如果加上print(),会打印出“none”,这是一个返回值的问题。
(26) 程序的算法的结构组成是什么?
任何算法都可以由顺序结构、选择结构和循环结构三种基本结构组成。顺序结构是指程序由上至下地执行代码,全程没有判断和跳转,直到程序结束。选择结构是根据特定条件判断后,选择其中一块代码执行;循环结构是在程序中需要反复执行某个或某些操作,直到条件为真或为假时才停止循环。
(27) str()函数使用范围是什么?
str()函数能够将整数(int)、浮点数(float)和布尔(bool)原模原样地转换为字符串(str),也可以用引号进行数据类型转换。
(28) int()函数使用规则是什么?
将str类型转换为int类型时,字符串必须是(整数)数字串,非数字串无法转换。将float类型转换为int类型时,直接舍小数取整数而不是四舍五入。将bool类型转换为int类型时,false/ture分别转换为0/1。
(29) float()函数使用规则是什么?
将str类型转换为float类型时,字符串必须是数字串(整数或小数),非数字串不允许转换。将int类型转换为float类型时,直接在整数后面加“.0”,如float(6)=6.0。将bool类型转换为float类型时,false/ture分别转换为0.0/1.0。
(30) 如何使用input()函数?
input()函数作用是接受来自用户的输入,返回值的类型是str,值的存储是通过调用完成的。input()函数先提出括号中的问题(没有就不提),随后在终端输入一个回答,敲击回车输入回答,也可以使用赋值运算符将回答赋值给变量。
(31) 常用的算术运算符有什么?
常用的算术运算符有加(+)、减(-)、乘(*)、除(/)、整除(//)、取余运算符(%)、幂运算符(**)。注意,如果整除运算中除数与被除数出现一正一负,则向下取整,例如print(13//-2)==print(-13//2)#-7。取余运算中出现一正一负,使用计算公式<余数=被除数-除数*商>,例如print(-16%3)#-16-3*(-6)=2。
(32) 常见的报错类型有哪些?
① SyntaxError: unexpected EOF while parsing # 语法错误,多余或缺失无法解析的符号
② SyntaxError: invalid character in identifier # 语法错误,有无效标识符,可能出现中文标点符号
③ IndexError: list index out of range # 索引错误,超出索引范围,确认列表是否为空
④ TypeError: must be str, not float # 数据类型错误,输入数据是错误的数据类型,比如字符串和数字直接使用加号“+”拼接
⑤ IndentationError: expected an indented block # 缩进错误,检查代码缩进是否正确
⑥ KeyError: 'coding' # 键错误,字典中没有特定key的对应值,检查键名或字典数据是否正确
⑦ ValueError: coding not found # 值错误,输入的数据类型不符合要求
⑧ NameError: name 'x' is not defined # 未初始化对象,变量没有被定义
⑨ AttributeError: 'happy' object has no attribute 'yes' # 属性错误,对象没有特定属性或方法,检查数据类型
⑩ SystemExit # 解释器请求退出,执行exit()函数出现
⑪ IOError # 输入/输出操作失败
⑫ ImportError # 导入模块/对象失败
⑬UnicodeDecodeError/UnicodeEncodeError/UnicodeTranslateError # Unicode解码/编码/转码的错误