购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

1.2 Python基本语法

Python语法简单、优雅,如同阅读英语一般,即使是非科班出身的用户,也能很快理解Python语句的含义。

1.2.1 基本数据类型和运算

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会自动识别。

1.2.2 运算符和表达式

Python中数值的基本运算和其他语言差不多,运算符及其使用说明如表1-1所示。

表1-1 运算符及其使用说明

1.2.3 条件判断语句

条件语句是指根据条件表达式的不同,使程序跳转至不同的代码块。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的位置上。

1.2.4 循环语句

生活中有许多重复的劳动,如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.2.5 字符串

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,输出的结果如下: wlDeKAE2rhorbavf0x09f0WMopO5oOWpg2Ca9CXhZ1BGJA966Wy/a5m8FpZ3nyuD


>请输入姓名:lili
>请输入年龄:8
我的名字叫lili,今年8岁了。

点击中间区域
呼出菜单
上一章
目录
下一章
×