Python语法简单、优雅,如同阅读英语一般,即使是非科班出身的用户,也能很快理解Python语句的含义。
1.变量
有计算机基础的读者都知道,计算机在工作过程中所产生的数据都是在内存中存储和读取的。内存类似于工厂的仓库,数据作为零件存储在仓库(内存)中不同的地方。仓库那么大,怎样才能快速找到这些零件(数据)呢?我们可以给每个零件贴上“标签”,根据标签名称,就可以找到它们了。这些标签,就是传说中的“变量”。使用“变量”可以快速定位数据、操作数据。比如,存储同学cathy的个人信息:
name = "cathy" #变量名name,存储姓名 age = 10 #变量名age,存储年龄 height = 138.5 #变量名height,存储身高 is_student = True #变量名is_student,存储是否是学生的标记 score1 = None #变量名score1,存储成绩
【重点说明】
·变量名包含英文、数字及下划线,但不能以数字开头。
·=用来给变量赋值,如变量name的值为cathy。
·变量在使用前必须赋值。
·#代表行内注释。
2.数据类型
Python的基本数据类型包括整数、浮点数、布尔型和字符串,可以使用type()函数查看一个变量的类型。比如查看同学cathy的各个变量的类型:
type(name) #字符串:<class 'str'> type(age) #整数:<class 'int'> type(height) #浮点数:<class 'float'> type(is_student) #布尔型:<class 'bool'> type(score1) #NoneType:<class 'NoneType'>
【重点说明】
·注释中的尖括号是执行type()函数后输出的结果。
·结果中的class意味着Python中一切皆对象,后面会讲到。
·score1的类型是NoneType,不是0,也不是空。很多情况下,API执行失败会返回None。
·变量不需要声明类型,Python会自动识别。
Python中数值的基本运算和其他语言差不多,运算符及其使用说明如表1-1所示。
表1-1 运算符及其使用说明
条件语句是指根据条件表达式的不同,使程序跳转至不同的代码块。Python的条件语句有:if、if-else和if-elif-else。下面来看几个判断成绩的例子。
(1)判断成绩是否合格:
score = 95 #成绩 #二选一 if score >= 60: #如果成绩60分及以上,则输出“合格” print("合格") else: #否则,输出“不合格” print("不合格")
运行以上代码后,输出“合格”。
(2)判断成绩是优秀、良好、及格还是不及格:
#多选一 if score >= 90: #如果成绩大于等于90 print("优秀") print("再接再厉") elif score <90 and score >=70: #如果成绩在70~90之间 print("良好") elif score < 70 and score >= 60: #如果成绩在60~70之间 print("及格") else: #其他情况 print("不及格")
运行以上代码后,输出“优秀”和“再接再厉”。
【重点说明】
·关键字if、elif和else后面的冒号(:)不能缺,这是语法规则。
·每个判断条件下的代码块都必须缩进,这是Python的一大特点,即通过强行缩进来表明成块的代码。这样做的好处是代码十分清晰工整,坏处是稍不注意,代码块就会对不齐,运行就会出错。
·Python中用于比较大小的关系运算符,跟其他语言类似,如表1-2所示。
表1-2 关系运算符
·Python中用于连接多个条件的逻辑运算符,如表1-3所示。
表1-3 逻辑运算符
下面来看一个判断闰年的例子。要判断是否是闰年,只要看年份是否满足条件:能被4整除,并且不能被100整除,或者能被4整除,并且又能被400整除。
实现代码如下:
year = input("请输入年份:") #通过命令行输入年份 year = int(year) #转换为整型 if (year%4==0 and year%100!=0) or (year%4==0 and year%400==0): print("%d年是闰年"%year) #闰年 else: print("%d年不是闰年"%year) #非闰年
【重点说明】
·第一行通过input( )函数实现从命令行中动态输入年份。
·if后面是判断闰年的条件表达式,由于and的优先级高于or,也可以省略圆括号。条件表达式还可以简写为:
if year%4==0 and (year%100!=0 or year%400==0):
·通过print输出字符串文字。这是一个经过格式化的字符串,双引号中是将要格式化的字符串,其中的%d是格式化符号,表示整数。双引号后面跟%year,表示将变量year的值转换为整数后插入到%d的位置上。
生活中有许多重复的劳动,如cathy做错事被罚抄课文5遍等。代码的世界也是如此,对于重复的功能,如果通过简单的复制、粘贴,代码就会变得沉重冗余,难以理解。Python中使用while和for循环来实现代码的重复利用,通常用于遍历集合或累加计算。
1.while循环
while循环的语法结构为:
while <条件>: 循环体
在给定的判定条件为True时执行循环体,否则,退出循环。循环的流程图如图1-9所示。
图1-9 循环流程图
以下代码实现了打印5遍字符串的功能:
#1.使用while执行5次循环 n = 1 #记录次数 while n<=5: #n<=5为循环条件 print("cathy正在努力抄第%d遍课文"%n) #每次循环输出的文字 n += 1 #自增1
【重点说明】
·while语句后要有半角冒号(:)。
·循环体要有缩进。
·每次循环n都会自增1,否则就会死循环。
2.for循环
for循环的语法结构为:
for <目标对象> in <对象集合>: 循环体
当执行for循环时,会逐个将对象集合中的元素赋给目标对象,然后为每个元素执行循环体。以下代码使用for循环实现了计数和遍历集合的功能:
#1.使用for执行5次循环 for n in range(1,6): #range()函数生成整数集合(1,2,3,4,5) print("cathy正在努力抄第%d遍课文"%n) #每次循环输出文字 #2.遍历字符串所有字符 name = "cathy" for n in name: print(n) #每次循环分别输出c、a、t、h、y #3.遍历列表中的所有项目 student = ["cathy",10,25] #记录姓名、年龄、体重 for item in student: print(item) #每次循环分别输出cathy 10 25
3.break和continue
在循环过程中,有时需要终止循环或者跳过当前循环。Python使用break和continue来分别表示终止循环和跳过当前循环。
来看一个break的例子:实现在1~100之间,找到第一个能被3整除且能被8整除的整数。实现代码如下:
a = 1 #初始为1 while a<=100: #循环100次 if a%3==0 and a%8==0: print("第一个能被3整除且能被8整除的整数是:%d"%a) break #终止循环 a+=1 #每次循环自增1
再来看一个continue的例子:实现在1~100之间,找到所有不能被3和8整除的数。实现代码如下:
for i in range(1,101): if i%3==0 and i%8==0: continue print("%d "%i)
【重点说明】
·range(1,101)函数生成了一个包含1~100的整数集合,注意,不包括101。
·if语句判断的是能被3和8整除的数,使用continue跳过for循环剩下的代码,继续执行下一次循环。
4.while和for使用场景
一般情况下,while和for循环可以互相代替,但也有一些使用原则:
·如果循环变量的变化,伴随着一些条件判断等因素,推荐使用while循环。
·如果仅仅是遍历集合中所有的数据,没有一些条件判断因素,推荐使用for循环。
1.引号
字符串是Python中最常见的数据类型,它包含在一对双引号(" ")或单引号(' ')中。单引号和双引号没有任何区别。
name = "cathy" #双引号字符串 like = 'english' #单引号字符串
当单引号中含有单引号(或者叫撇号)时,程序运行就会出错,解释器会“犯迷糊”,如下面的代码所示。它会将'i'看成一个字符串,后面的m就不知道如何处理了。
age = 'i'm ten ' #单引号中包含单引号 错误信息:SyntaxError: invalid syntax
针对上述问题,有以下两种修改方式。
方式一:将字符串改为双引号括起来。
age = "i'm ten " #使用双引号
方式二:使用反斜杠(\)将字符串中的单引号进行转义。
age = 'i\'m ten ' #加转移字符:\
2.访问字符串
Python访问字符串,可以使用方括号([ ])下标法来截取字符串,代码如下:
hello = "hello,Python!" hello[0] #获取第1个值:h hello[1:4] #获得第2~5个(不包括)范围的值:ell hello[-1] #获取最后一个值:!
【重点说明】
·字符串的下标是由左往右,从0开始标记的。
·截取任意范围内容,其格式为:起始下标:终止下标,这叫做切片。需要注意的是,终止下标是不包含在截取范围内的,如hello[1:4]得到ell。
·下标为负数时,从右往左标记,如-1就是获取最后一个值,-2获取倒数第二个值,以此类推。
3.字符串方法
字符串自带很多处理方法,通过简单的调用,就可以实现对自身的处理。以下为字符串最常用的几种处理方法,读者可以打印出来看一下效果。
cathyStr =" Hello,cathy! " #两边有空格的字符串 cathyStr.strip(" ") #去除字符串两边的空格 cathyLst = cathyStr.split(",") #以逗号作为分隔符,切分字符串,保存为列表 cathyStr.replace("!",".") #将字符串中所有感叹号替换为句号 cathyStr.lower() #将字符串中所有字母都转换为小写字母 cathyStr.upper() #将字符串中所有字母都转换为大写字母
4.格式化输出
字符串的格式化输出有3种方法:
第1种是我们一直在print( )函数中使用的%格式法。例如,要输出字符串“我的名字叫XX,今年X岁了。”,其中名字和年龄都是动态输入的。实现代码如下:
name = input("请输入姓名:") age = int(input("请输入年龄:")) message = "我的名字叫%s,今年%d岁了。"%(name,age) print(message)
【重点说明】
·在message字符串中,%s和%d是格式化符号,%s代表字符串,%d代表整数。它们与后面的name和age一一对应,功能是将name设为字符串,将age设为整数,再插入到%s和%d对应的位置上。
程序运行后,根据提示输入cathy和10,输出的结果如下:
>请输入姓名:cathy >请输入年龄:10 我的名字叫cathy,今年10岁了。
这种方法有个特点,就是格式化符号和后面的变量要一一对应,位置一旦搞错,就会出现错乱。这时候可以考虑使用第2种格式化输出方法。先看一下代码:
name = input("请输入姓名:") age = int(input("请输入年龄:")) message = "我的名字叫%(i_name)s,今年%(i_age)d岁了。"%{"i_name":name,"i_age":age} print(message)
【重点说明】
·%s和%d的中间添加了i_name和i_age这两个参数。在后面的字典({}括起来的部分)中可以找到参数对应的值,这些值会替换参数形成完整的字符串。
程序运行后,根据提示输入tom和15,输出结果如下:
>请输入姓名:tom >请输入年龄:15 我的名字叫tom,今年15岁了。
第3种格式化输出的方法是使用字符串的format()函数,用法与第2种方法类似。还是先来看代码:
name = input("请输入姓名:") age = int(input("请输入年龄:")) message = "我的名字叫{i_name},今年{i_age}岁了。".format(i_name=name,i_age=age) print(message)
【重点说明】
·字符串中的{}中定义了参数,这些参数可以在format()函数中找到对应的值,这些值会替换参数形成完整的字符串。
程序运行后,根据提示输入lili和8,输出的结果如下:
>请输入姓名:lili >请输入年龄:8 我的名字叫lili,今年8岁了。