Python全案例学习与实践
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

7.1 Python程序的基本组成

为了比较完整地展现Python程序的概貌,引入一个温度转换的例子,以此来说明Python程序的基本组成。

7.1.1 一个温度转换的例子

在日常生活中,可能会遇到将摄氏温度转换为华氏温度的情况。这两种温度转换是有规律的,可用如下公式表示:

式中,F代表华氏温度值,C代表摄氏温度值。

为了写出程序,必须进行算法设计,把设计程序的思路厘清楚。

首先,接收一个由键盘输入的摄氏温度值。

其次,利用式(7-1)将刚输入的摄氏温度值转换为华氏温度值。

最后,将转换得到的华氏温度值“报告”出来,即输出。

按照上述思路,写出初步的程序如下:

# TempConvert1.py
# 将摄氏温度转换为华氏温度
# 作者:沈红卫
cs=eval(input(’请输入摄氏温度值:'))        #等待输入摄氏温度值
fs=9/5*cs+32                        #利用公式转换
print(’对应的华氏温度为’, fs, ’度。')          #输出转换后的华氏温度

现对上述程序进行分析:整个程序只有6行,其中,前3行以“#”开头,它们是注释行,不算语句;后3行是3条语句,分别用于输入温度、转换温度、输出温度。整个程序是最常见的“输入—处理—输出(简称‘IPO')”的程序形式。

由此可见,Python程序通常由注释、语句、函数、常量、变量等基本部件组成。

1.注释

注释就是对程序或某条语句的解释和说明。

2.语句

语句是程序的最小组成单位,一个程序总是由一条条语句组成的。

3.函数

函数是用于解决或计算某个问题的程序模块(语句块)。

4.常量

常量是不能变化的量。在程序中必定会使用常量。例如,在求圆的面积时,必须使用圆周率3.14,它就是一个典型的常量。

5.变量

变量是可变的量。在程序中必定会使用变量,用于输入、暂存和输出信息。

7.1.2 程序的注释

Python程序的注释有单行注释和多行注释之分。

1.单行注释

Python程序的单行注释是以“#”引导的一段文字,文字内容主要用于描述程序或语句的设计思想、作用或其他需要说明的信息。注释可以单独成行,用于解释说明上面或下面某段程序的作用、算法;也可以跟在某条语句的后面,用于解释、说明该语句的作用、算法。

Python中单行注释的方法是:

#这是Python的注释,它对程序的运行没有任何影响

2.多行注释

多行注释,顾名思义,就是具有多行的注释,它通过使用3对单引号或3对双引号来表示,例如:

"""注释内容
注释内容
注释内容
注释内容"""

或者

'''
注释内容
注释内容
注释内容
注释内容
'''

在上例中,分别使用3对双引号和3对单引号进行注释。

千万不要小看这3对单引号或3对双引号的作用,它们除了用于对程序进行注释(往往用于多行注释),还可以用于打印多行字符串。例如,运行以下代码:

msg = '''
第1行
第2行
第3行
'''
print (msg)

则在屏幕上输出如下内容:

第1行
第2行
第3行

由此可见引号的神奇之处。

7.1.3 语句

Python程序的语句必须单独成行,它是程序的最小单位。一个程序总是由若干条语句组成的。需要强调的是,Python程序的语句不需要任何结束表示符。

Python程序的语句形式多样,例如,在7.1.1节的例子中,后3行就是3条语句。

· 赋值语句:调用输入函数以获取输入值,然后赋值给变量cs。

· 赋值语句:将表达式的值赋给变量fs。

· 函数调用语句:调用输出函数将结果输出。

Python语句中最常见的是赋值语句,其通常有两种形式。

1.赋值语句的第一种形式

x = 表达式

例如:

x=3

该语句表示将3赋给变量x。

2.赋值语句的第二种形式

x, y =表达式1,表达式2

例如:

x, y=3,4

该语句表示将3赋给变量x,将4赋给变量y。

在一般情况下,一条语句只占用一行,即在Python程序中,一般是一行包含一条语句的所有代码。如果遇到一行无法包含某条语句的全部代码而必须换行的情况,那么该怎么办?

有两种方法解决语句续行的问题。

1.语句续行的第一种方法

在该行代码末尾加上续行符“ \”,即“空格”+“\”。记住,在“ \”前必须有一个空格。

例如:

>>> test = 'item_one' \
'item_two' \
'tem_three'

>>> test
'item_oneitem_twotem_three'
>>>

在上例中,变量test被赋值的语句共占用了3行,赋值号右侧是一个字符串,最终它的输出结果是:'item_oneitem_twotem_three'。

需要提醒的是,虽然赋值号右侧只是一个字符串,但是由于要分行书写,所以,字符串的每一行必须用配对的引号引起来,否则就不符合语法要求,是错误的。

2.语句续行的第二种方法

在需要跨行的语句前后加上括号“()”。如果在语句中使用了{}、[],而其中的内容需要跨行,则可直接跨行,不需要续行符。

例如:

>>> test2 = ('csdn '
'cssdn')
>>> test2
'csdn cssdn'
>>>

输出结果为:'csdn cssdn'。由此可见,如果一个字符串需要被跨行表示,那么每行必须使用配对的引号。

7.1.4 常量

常量就是不能变化的量。在程序中一定会使用常量(常值),如7.1.1节例子中的9、5和32都是常量。

Python并没有符号常量,也就是说,不能像C语言那样给常量命名。

在Python中没有专门的规定用于定义常量,通常使用大写标识符表示常量,但不是硬性规定,仅仅是一种区别于变量的提示效果而已。

例如,以下语句定义了一个常量NAME,但它的本质其实是变量。

NAME = 'Python' #本质是变量

Python常量包括数字、字符串、布尔值和空值。

1.数字

数字又被称为数值,通常分为整数、实数和复数3种类型。

1)整数

整数包括正整数、0、负整数,通常使用十进制、十六进制等形式表示。

例如:

>>> x=123
>>> x
123
>>> x=0x7b
>>> x
123
>>>

读者对十进制比较熟悉,而对十六进制则比较陌生。当以十六进制表达整数时,必须以0x(0X)作为前导。十六进制的数码为0~9和a~f,其中a~f这6个数码没有大小写之分。此处不讨论各种进制数值之间的转换问题。

2)实数

实数又被称为浮点数,通俗地说,就是带小数点的数。它有一般表示法和指数表示法两种表示形式。

例如,对于浮点数123.78,在Python中可以表示为:

>>> x=123.78
>>> x
123.78
>>> x=1.2378e2
>>> x
123.78
>>>

在上例中,e代表10, e后面的2表示2次方。其中,e也可以大写。例如:

>>> x=1237.8E-1
>>> x
123.78
>>>

3)复数

复数是由一个实部和一个虚部组合而构成的,表示为x + yj。实数部分和虚数部分都是浮点数,虚数部分必须有后缀j或J。

例如:

>>> x=3.1+5.7j
>>> x
(3.1+5.7j)
>>> x=-1.23+6.71J
>>> x
(-1.23+6.71j)
>>>

2.字符串

所谓字符串,就是用配对的双引号或单引号包围起来的一段文字,如"你好"、'hello'。

如果文本本身带有双引号,那么又该如何表示呢?

可用以下方法表示:

'I need "Python"'

上述代码表示的字符串就是:I need "Python"。

3.布尔值

在Python中,可直接用True、False表示布尔值(请注意大小写),前者表示“真”,后者表示“假”。

例如:

>>> x=5
>>> x>6
False
>>> x<7
True
>>>

4.空值

空值不等于0(≠0),因为0是有含义的,而空值是无任何意义的。在Python中,空值用None表示。千万要记住,空值不等于0,也不等于空格。

7.1.5 变量

变量是内存中命名的存储位置。与常量不同的是,变量的值可以动态变化。

7.1.1节例子中的cs和fs就是典型的变量。

有一点需要加以特别声明,Python中的变量不需要事先定义,可直接使用赋值运算符对其进行赋值操作,根据所赋的值来决定其数据类型。这是与其他大多数计算机语言明显的不同之处。

在Python中,在对变量进行赋值时,使用单引号和双引号的效果是完全一样的。例如:

a = "这是一个变量"
b = 2
c = True
d = 'hello'
#分别定义了4个变量:字符串变量a,数值变量b,布尔值变量c,字符串变量d

每个变量对应相应的内存空间,因此每个变量都有相应的内存地址。变量赋值的本质就是将一个变量的地址复制给另一个变量。这一点也有别于其他计算机语言。

如何获取变量的地址呢?通过内置函数id()即可获取。

例如:

>>> x=5
>>> y=x
>>> id(x)
1549102688
>>> id(y)
1549102688
>>>

从上述代码中可以清楚地看出,变量赋值的本质是内存地址复制。换言之,x和y是同一个对象,只不过换了一个名称而已,就像某人的姓名和别名一样。这一点与其他计算机语言真的不一样!

可以使用id()函数输出对象的地址,举例如下:

str1 = "这是一个变量"
print("变量str1的值是:"+str1)
print("变量str1的地址是:%d" %(id(str1)))

后续有关章节将更为详细地讨论变量问题。

7.1.6 标识符

在Python中,为了使用变量,必须命名变量;为了定义函数,也必须命名函数。凡是类似这样需要命名的对象,统称为Python的“标识符”,它是英文单词“identifier”的中文翻译。

因此,标识符也即变量名、函数名、类名、属性名等。

在Python中,命名标识符必须遵循以下规则:

· 第一个字符必须是字母或下画线(_)。

· 余下的字符可为字母、下画线(_)或数字(0~9)。

· 标识符长度不限。

· 标识符不能与关键字同名。

· 标识符是区分大小写的,也就是说,Score和score是不同的。

按性质分,标识符可分为以下3类。

1.普通类(public)

即正常的函数和变量名,如area、name等,这一类是最常被使用的。

2.特殊类

即类似于__xxx__这样的变量,标识符前后均有两条下画线,它们往往是由Python内部定义的,可被直接引用,但它们是有特殊用途的,如__author__、__name__、__init__,它们是Python内置的变量或属性。

自定义标识符要尽量避免采用类似的形式。

3.私有类(private)

即类似于__xxx这样的函数或变量,标识符前有两条下画线,如__score。它们往往作为私有变量,被用于函数(方法)内或类内。

按照上述规则,Python的所有关键字都不能被用作标识符。Python的关键字共有31个,分别是:

['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

7.1.7 函数

为了以模块化思想实现编程,Python程序常使用库函数或自定义函数。函数是程序中不可或缺的重要组成部分。例如,在上述温度转换的程序中,使用input()、print()等内置函数以实现输入和输出。在大多数情况下,程序中还将使用自定义函数。

下面以自定义函数的方式写出温度转换的新程序,如下:

# 将摄氏温度转换为华氏温度
# 作者:沈红卫
def CtoF():                                    #定义名为CtoF的函数
    celsi=eval(input('What is the Celsi temperature? '))     #等待输入摄氏温度值
    fahrenheit=9/5*celsi+32                     #利用公式转换
print('The temperature is', fahrenheit, 'degrees Fahrenheit.')
#输出转换后的华氏温度
#自定义函数结束
#运行该函数
CtoF()

上述程序定义了一个名为CtoF的函数,它的作用就是将摄氏温度转换为华氏温度。函数一旦被定义,即可直接调用,而不需要做任何说明。这一点也非常有别于其他计算机语言。

以上述函数为例,调用的方法如下:

CtoF()

也就是说,Python调用函数的方法是:

函数名(参数)

后续章节将专门讨论函数,此处只是简要介绍而已。