本文列出一些要点,帮助已经学会C/C++,Java(或其他面向对象语言)的同学快速入门Python。这些要点是关于语言的,没有涉及开发环境。
Python程序的构成
1. 第一个Python程序——Hello World程序
下面的一行代码构成打印Hello World的Python程序。
print(“Hello World”)
上一行代码存为文件helloworld.py。在Windows终端上(注意,当前目录下须有helloworld.py),输入命令:
python helloworld.py
就运行了程序(实质是运行python解释器程序解释执行了helloworld.py。须事先安装python。),在终端上打印出: Hello World
2. Python程序文件的后缀名必须是”.py“
Python程序文件后缀必须是.py。这样,python解释器才视该文件为python代码文件。
3. 第二个Python程序——求两个数的和
程序功能:输入两个数,输出它们的和。
代码如下:
#程序功能:输入两个加数,输出它们的和
firstNumStr= input("输入被加数:") #从键盘输入一串数字,存入firstNumStr变量中。“输入被加数:”这一段文字会打印到屏幕上,用作输入提示。
firstSum = float(firstNumStr) #float函数把文字类型的数字(firstNumStr变量存储)转换为浮点数(firstSum变量存储)
secondNumStr = input("输入加数:")
secondNum = float(secondNumStr)
sum = firstSum + secondNum #求和:firstNum变量的值和secondNum变量的值相加,和存入sum变量
print("两个数之和:" + str(sum)) #str(sum)是把sum变量的整数值转换为字符串类型的数字。
上述代码有6条语句。其中,#号之后到行末的文字都是注释。
上述代码存为aplusb.py。在Windows终端上(注意,当前目录下须有helloworld.py),输入命令:
python aplusb.py
就运行了程序(实质是运行python解释器程序解释执行了aplusb.py。须事先安装python。),在终端上将输出以下文字:
输入被加数:
而后光标一闪一闪等待用户输入。用户输入完毕(敲回车表示完毕),输入的数字字符串赋给firstNumStr变量。接着,该数字被转换为浮点数。类似地,输入加数。最后,求得两个数的和,输出结果。
4. 概括起来讲
1) Python程序由一条或多条语句组成。
2) 一条语句独立占一行或多行。一行中不能写两条语句。无须用分号来表示语句结尾。
3) 程序的执行从第一条语句开始往后执行,直至最后一条语句或者遇到退出语句。无须有main函数。
变量
1. 变量是什么
Python中,变量是值的名字,也即变量是值的引用。变量v可以先引用整数值(即变量v是某个整数值的名字),接着引用字符串值,再接着引用浮点数值。以下写法在Python中是允许的,在C/C++, Java中是不允许的。
v = 1
v = “hello”
v = 6.8
变量的类型实际上是指值的类型。上面代码中,第一行代码使得变量v的类型是整型;第二行代码使得变量v的类型是字符串类型,第三行代码使得变量v的类型变成浮点数类型。
2. 变量的定义
Python中,第一次赋值就是定义变量。 如下面的写法定义了变量v:
v = 1
变量必须先定义后使用。使用的例子有参与运算、用作实参、赋值给其他变量等等。
字符串
1. 字符串的写法
- 用单引号或双引号括起来。如:"Hello world!",'hello' 。
- 同样有转义字符。'\n'是换行符。'\\'是反斜杠。'\t'是制表符。等等。
2. 字符
Python中没有单独设字符这种数据类型,而是把字符视为长度为1的字符串。下面是字符的3个例子:'a', '1', "$" 。
3. 字符串与整数、浮点数之间的转换
- 整数、浮点数转换为字符串,用str()函数。
- 数字字符串转换为整数,用int()函数。
- 数字字符串转换为浮点数,用float()函数。
- 字符串不能和整数进行拼接操作。你应当用str()函数把整数转换为字符串后再进行拼接。
4. 字符串对象和方法
Python中,任何值,无论是整数值、浮点数值还是字符串值,都存储为一个对象。对象由多个属性组成。一个属性有两个组成部分:属性名和属性值。属性分数据属性和方法属性。
字符串对象有以下方法:
- title() 把字符串内的各个单词首字母变成大写。
- upper() 把字符串的所有字母变成大写。
- lower() 把字符串的所有字母变成小写。
- rstrip() 去除字符串尾部空白。
- lstrip() 去除字符串头部空白。
- strip() 去除字符串两端空白。
- split() 分割字符串,得到单词列表。
- 还有很多方法,无法逐一列出。参阅python手册,或用搜索引擎进行检索。
5. 字符与ASCII码的转换
要把字符转换为ASCII码,用ord( )函数;要把ASCII码转换为字符,用chr( )函数。
6. 如何查阅各个函数或方法的用法
- 以ord函数为例,你可以在搜索引擎中输入“python ord”来查阅ord()函数的用法。
- 你也可以利用安装在你电脑上的python手册来查阅ord()函数的用法。windows 7系统中启动python手册的做法图1所示。
ord()函数的用法如图2所示。
图1 启动python手册
图2 python手册中查询ord()函数的用法
输入字符串、数字
1. input()函数输入的是字符串
下面的写法,输入的是字符串,用num_str变量引用存储输入的文字的字符串对象。
num_str = input("输入一句话:")
这里,"输入一句话:"用作输入提示,就是打印到屏幕的文字,用来提示用户输入什么。
执行该语句时,终端上将输出以下文字:
输入一句话:
而后光标一闪一闪等待用户输入。用户输入完毕(敲回车表示完毕),输入的文字(字符串类型)将赋值给num_str变量。
2. 要输入数字,应该进行类型转换
下面两行代码中,第一行是输入字符串,第二行代码是把字符串转换为整数数字。
num_str = input( ) #这次没有输入提示
num = int(num_str)
上面,用int( )函数把数字字符串转换为整数。要把数字字符串转换为浮点数,需要用float( )函数,如下所示。
num_str = input( ) #这次没有输入提示
num = float(num_str)
对象和方法
概念上,Python对象与Java对象是相同的。Python对象与C语言的结构体也有类似之处。对象由一组属性组成。属性分数据属性和方法属性两类。每一个属性都有属性名和属性值两部分。
方法(即方法属性的值)实质上是函数,不过是能够访问对象内部的属性的函数。普通的函数是不能够访问对象内部的属性的。
调用普通函数func的形式如:
result = func(10, 7.6)
这里,10和7.6是实参,result变量接收函数的返回值。
调用方法method的形式如:
result = object.method( 99)
这里,object是一个对象,点号.是成员操作符,99是实参。method方法能够访问object对象内部的属性。
if语句
if语句有三种。与C/C++,Java相比,除了书写格式有差异外,if语句的用法本质上是类似的。下面给出了每种语句的用法示例,你应当把它与你熟悉的语言进行对比。通过对比,你肯定能快速掌握Python语言的if语句的用法。
第一种if语句
第一种if语句的写法是:
if 布尔表达式:
语句块
布尔表达式跟C/C++, Java中的布尔表达式是等同的,都用于检查某个条件是否成立。语句块是由一条或多条语句组成。
注意:(1) 布尔表达式后面有一个冒号。(2) 语句块中的所有语句都要缩进4个空格。
第一种if语句的示例代码如下。代码的功能是输入整数,输出它的绝对值。
numStr = input("输入一个整数:")
num = int(numStr)
if num < 0: #if语句,当num<0成立时,执行其后的语句块
num = -num #这里,语句块只有一条语句组成。
print("绝对值:" + str(num)) #这一条语句不属于if语句。
第二种if语句
第二种if语句的书写格式是:
if 布尔表达式:
语句块1else:
语句块2
布尔表达式跟C/C++, Java中的布尔表达式是等同的,都用于检查某个条件是否成立。语句块是由一条或多条语句组成。
注意:(1) 布尔表达式后面和else后面都有一个冒号。(2) 语句块中的所有语句都要缩进4个空格。
第二种if语句的示例代码如下。代码的功能是输入分数,输出及格与否的结论。
第三种if语句
第三种if语句的书写格式是:
if 布尔表达式1:
语句块1elif 布尔表达式2:
语句块2
elif 布尔表达式3:
语句块3
else:
语句块4
以上写法中, elif分支可多可少;else分支可以没有。你能猜到elif是什么单词的缩写吗?答案是else if。
第三种if语句的示例代码如下。代码的功能是输入年龄,得出门票价格。计价规则是:4岁以下,免费; 4~18岁,5元;18岁以上,10元。
逻辑运算符
在C/C++, Java语言中,实现“而且”、“或者”、”非“的逻辑运算符是&&, ||, !。
Python语言中,实现“而且”、“或者”、”非“的逻辑运算符是and, or, not 。
下面的代码是逻辑运算符的示例。代码的功能是输入年份,输出该年份是闰年还是平年的结论。
布尔类型
布尔类型就是值为真或假的类型。Python语言中,用关键字True代表真,False代表假。注意第一个字母是大写。
在C/C++, Java语言中,用true代表真,false代表假。注意第一个字母是小写。
while语句
Python的while语句与C/C++,Java的while语句相比,除了书写格式有差异外,用法本质上是类同的。
Python的while语句的书写格式是:
while 布尔表达式:
语句块
以上格式中,语句块由一条或多条语句组成。语句块的每一条语句都要缩进4个空。要记得写布尔表达式后面的冒号。
下面的代码给出了while语句的示例。代码的功能是求1+2+3+4+5的和。
函数
函数是由一组语句组成的。调用函数就是执行这一组语句。
函数的使用分定义函数和调用函数,用法与C/C++, Java差不多(以后会接触到调用函数时传入关键字参数,这是后两种语言没有的)。
定义函数和调用函数
Python中,定义函数的书写格式是:
def 函数名(形式参数):
语句块
上述格式中,def是define的缩写。上述写法构成一条Python语句。C/C++, Java中使用花括号括起函数体,Python中是用缩进的语句块代表函数体。要记得起始行末尾的冒号。强调一遍,语句块(函数体)要缩进。
要让函数返回值,需要使用return语句,这与C/C++, Java是一致的。
函数定义和调用举例1:
作用域
1. 全局作用域和局部作用域
- 每一个Python文件拥有一个全局域。这一点与C/C++, Java类似。
- 每一个函数定义都生成该函数的局部域。该函数内定义的变量,在函数外无法使用。这一点与C/C++, Java类似。
- 与C/C++, Java不同,if语句,while语句,for语句的语句块不构成一个局部作用域。也就是说,它这些语句的语句块内定义的变量,在语句块外部也可以使用。
2. 示例:if语句,while语句,for语句的语句块不构成一个局部作用域
下面代码中的price变量在if语句的语句块内定义,在语句块外依旧可以使用。
Python语言对作用域有自己的若干约定。比如函数内部,修改全部变量的话,要事先用global语句声明该全局变量。
在入门阶段,不宜纠缠过多枝节,故这里不予介绍。那同学们会问,啥是主干啥是枝节呢?解题要用到的知识内容,就是主干;用不到的,就是枝节。
列表和for语句
C/C++、Java中的数组,在Python中对应的是列表。数组和列表都是由多个元素组成的。数组能干的事,列表都能干,而且列表能干更多事。
列表的用法
1. 定义列表
定义列表用的是方括号。下面定义了一份字符串为元素的列表,有courses变量引用它。
下面定义了空列表。
2. 访问列表元素
访问列表元素的做法与C/C++、Java的做法是一样的。下面的代码示范了这一点。
Python可以用负数作为下标,比C/C++、Java的数组下标更灵活。
3. 修改、添加列表元素
修改、添加列表元素的示例代码如下。你可以复制这段代码,建立一份python程序文件,运行该文件看看效果。
for循环遍历列表
1. for语句的写法
Python语言的for语句和C/C++、Java的for语句有较大差别。Python的for语句的书写格式是:
for 变量 in 列表:
语句块
示例程序如下。你可以复制这段代码,建立一份python程序文件,运行该文件看看效果。
2. for语句的执行流程
for语句的执行流程描述如下。
依次对列表中的每个元素e,执行下面两个步骤:
1). 把当前元素e的值赋值给变量。
2). 执行语句块。
3. 用range()函数实现C语言风格的for循环
从1加到5,用循环来实现,在C/C++,Java中该怎么写,在Python中又该怎么写?
C/C++、Java中的写法是:
int sum = 0;
for (int i = 1; i < 6; i++) {
sum += i;
}
Python中的写法是:
sum = 0
for i in range(1, 6):
sum += i
上面代码中,range(1, 6)会生成[1, 2, ,3, 4, 5]这样一份列表。
4. range()函数
下面的代码示范了range()函数的用法。更多的说明,请参阅Python手册,或者通过搜索引擎搜索。
上面的代码中,range( )函数生成range对象,list( )函数获得range对象内的列表。
一行中输入一组数的做法
下面的代码示范了如何让用户运行程序时,在一行中输入多个整数。
关于上面的代码的说明:
1. line.split( )是调用字符串对象的split方法。它的作用是,以空格为分隔符,分割整行文本(即line变量的值)得到数字字符串列表。
2. 而后,遍历数字字符串列表,逐个地把数字字符串转换为整数,加入整数列表(或者说数组)中。
矩阵
Python中,矩阵是以每一行为元素的列表。而每一行自身是一份列表,因此矩阵是列表的列表。
下面的代码示范了定义矩阵和访问矩阵元素的做法。访问矩阵元素使用行下标和列下标。要记得,可以用负数作为下标,-1代表最后一个元素,-2代表倒数第二个,以此类推。
下面的代码示范了如何用for循环遍历矩阵。代码的功能是累加各行的和,结果存入列表row_sum中。
下面的代码示范了如何分两行输入2x3的矩阵。注意,三引号括起来的是注释,也就是下面的第2~6行是注释。
列表切片
列表切片是指获得列表的一部分元素,组成子列表。在很多场合都会用到。
注意:[1:4]是不含下标4的元素的。[-2:-1]是不含下标-1(也即最后一个)的元素的。
字典
在日常生活中,我们经常遇到“键-值对”类型的数据。比如,生词本用来记录英文单词及其中文释义。这里,英文单词是键,中文释义是值。又比如,电话簿记录了人名和电话号码。此中,人名是键,电话号码是值。使用这种类型的数据时,用‘键’查‘值’是最常发生的;用‘值’查‘键’的几率会少得多。
字典的查询
Python语言提供了字典来存储和操作上述“键-值对”类型的数据。下面的代码示范了字典的用法,是用来存储电话簿。
对于上面代码,说明如下:
1. contacts是一份字典。定义字典使用花括号{ }。字典的条目是一个键值对,比如字符串'马云'是键,字符串'13309283335'是值。
2. name in contancts,是用来判断name作为键,有没有出现在字典中。
3. contacts[name],是得到name键在字典中的值。加入name是'马云',那么contacts[name]将得到'13309283335'。
4. 字典中键可以是整数类型、浮点数类型或字符串类型,还可以是其他类型。但列表不能用作键。
字典中插入键值对
下面的代码片段示范了如何在字典中插入键值对,以及如何修改键值对中值的部分。代码的功能是统计数字在列表中的出现次数。
关于字典的更多用法,在你需要用到某种操作时,再上网搜索。
模块
Python模块与Java包有些类似,也有不同。
每一个Python程序文件都构成一个模块。文件名就是模块名,比如newWordsFuncs.py程序文件的模块名是newWordsFuncs。
下面举例说明模块的导入。
假如你编写了newWordsFuncs.py程序文件,里头定义了read_command( )函数,append( )函数,delete( )函数和query( )函数。如何在另一个python程序文件main.py中使用newWordsFuncs.py内定义的函数呢?
下面讲解3种导入的方法。这3种方法本质是一样的,细节上有差异。
1. 导入模块
下面是第一种用法的main.py文件的代码。底色为橙色的文字与模块有关。导入模块的写法是:
import 模块名
调用模块内函数的写法是:
模块名.函数(实参)
2. 导入模块并重命名
下面是第二种用法的main.py文件的代码。底色为橙色的文字与模块有关。导入模块并重命名的写法是:
import 模块名 as 新模块名
调用模块内函数的写法是:
新模块名.函数(实参)
3. 直接导入模块内的函数
采用前面两种导入方法的话,调用函数时必须带上模块名。
下面是第三种用法的main.py程序文件的代码,它里头调用函数时,无须带上模块名。直接导入模块内的函数的写法是:
from 模块名 import 函数名1, 函数名2
如果要导入更多函数,在尾部追加函数名即可。下面的代码直接导入了4个函数。底色为橙色的文字与模块有关。
上面的代码的第一行换成:
from newWordsFuncs import *
将把newWordsFuncs模块内的全部函数直接导入进来(代价是消耗内存空间)。这里,星号*代表所有。接着,你可以向上述代码那样,不带模块名地调用函数。
文件操作
Python的文件操作,在写法上与C/C++或Java类似,同样遵循打开文件 –> 读写文件 –> 关闭文件的流程。
1. 读取整个文件的内容
下面是读取整个文件内容的示例程序。你可以自己准备一份10-1-data.txt文件,文件内容随意。然后复制以下内容,存为程序文件,最后运行程序看看效果。
with ... as ...:
with语句块
2. 逐行读取文件
下面的代码示范了逐行读取文件的用法。with语句的说明参照上一种用法。with语句结束时会自动关闭文件。
3. 读入到列表
下面的代码示范了读取文件的内容并存入列表的做法。
4. 读入有汉字的文件
5. 写入文件
下面的示例程序示范了写入文件的用法。